码迷,mamicode.com
首页 > 数据库 > 详细

《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞

时间:2015-07-17 18:29:26      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

 

 

 

看完《sql注入攻击与防御 第2版》后,发现原来自己也能黑网站了,就一个字:太爽了。

 

 

 

简单总结一下入侵步骤:

  1、确定是否有sql注入漏洞

  2、确定数据库类型

  3、组合sql语句,实施渗透

  4、获取最高权限后,想怎么玩就怎么玩

 

 

 

 

 

学习sql注入漏洞,需要的材料:

  浏览器           X1

  wamp集成包  X1

  php脚本一个  X1

  数据库一个     X1

  

  php脚本内容:

技术分享
 1  <?php
 2      //获取数据
 3      $id= empty($_GET[‘id‘])?"NULL":$_GET[‘id‘];
 4      $name= empty($_GET[‘name‘])?"NULL":$_GET[‘name‘];
 5      //连接数据库
 6      $connect = mysql_connect(localhost,root,123456);
 7      //选择数据库
 8      mysql_select_db(new,$connect);
 9      //组合sql语句
10      $sql = "SELECT * FROM one where id={$id} or name={$name}";
11      //执行sql语句
12      $result = mysql_query($sql);
13      //显示数据结果
14      while ($row = mysql_fetch_array($result)) {
15          echo "<pre>";
16          print_r($row);
17          echo "</pre>";
18      }
View Code

 

  创建数据库和数据表

技术分享
1 --创建数据库
2 Create databases if exists new;
3 --创建数据表
4 create table one(
5     id int not null auto_increment primary key,
6     name varchar(10) not null,
7     pwd varchar(10) not null,
8     price int not null
9 )engine=myisam default charset=utf8;
View Code

 

 

 以下将用5种方法判断是否有sql注入漏洞

  1、根据运算符判断

  2、根据连接字符串判断

  3、根据内联sql判断

  4、根据sql注释符判断

  5、根据时间延迟判断

 

 

 

 

以下例子是判断是否有sql注入的测试。

 

 

一、根据<运算符>判断是否有sql漏洞。实现步骤如下:

  正常运行流程:

    1、在浏览器输入地址

      技术分享

      Sql语句:SELECT * FROM one where id=1 or name=‘NULL‘

    2、查看浏览器输出结果,将发现id1的数据被输出

  非正常运行流程,使用运算符:

    1、在浏览器输入地址

       技术分享

      Sql语句:SELECT * FROM one where id=4-1 or name=‘NULL‘

    2、查看浏览器输出结果,将发现id3的数据被输出。因为sql执行了4-1的运算了。

 

 

二、根据<字符串>判断是否有sql漏洞。实现步骤如下:

  正常运行流程:

     1、在浏览器输入地址

        技术分享

      Sql语句:SELECT * FROM one where id=NULL or name=‘hello‘

    2、查看浏览器输出结果,将发现namehello的数据被输出

  非正常运行流畅,使用字符串连接

    1、在浏览器输入地址

       技术分享

      Sql语句:SELECT * FROM one where id=NULL or name=‘he‘ ‘llo‘

    2、查看浏览器输出结果,将发现namehello的数据被输出。因为sql执行了:字符串连接操作。

 

 

三、根据<字符串内联>判断是否有sql注入漏洞。实现步骤如下:

  正常运行流畅:

    1、在浏览器输入地址

       技术分享

      Sql语句:SELECT * FROM one where id=NULL or name=‘hello‘

    2、查看浏览器输出结果,将发现namehello的数据被输出。

  非正常运行流程:

    1、在浏览输入地址

       技术分享

      Sql语句:SELECT * FROM one where id=NULL or name=‘he‘ ‘llo‘ or ‘1‘=‘1‘

    2、查看浏览器输出结果,将发现所有数据被输出。

 

 

四、使用<sql的注释符号>判断是否有sql输入漏洞

  正常运行流程:

    1、在浏览器输入地址

       技术分享

      Sql语句:SELECT * FROM one where id=3 or name=‘NULL‘

    2、查看浏览器输出结果,将发现id3的数据被显示出来

  非正常运行流程:

    1、在浏览器输入地址

       技术分享

      Sql语句:SELECT * FROM one where id=3-- or name=‘NULL‘

    2、查看浏览器输出结果,将发现id3的数据被显示出来

 

 

五、使用<时间延迟>判断是否有sql注入漏洞

  正常运行流程:

    1、在浏览器输入地址

       技术分享

      Sql语句:SELECT * FROM one where id=3 or name=‘NULL‘

    2、查看浏览器输出结果,将发现id3的数据被显示出来

  非正常运行流程:

    1、在浏览器输入地址

      技术分享

      Sql语句:SELECT * FROM one where id=3 or sleep(10) or name=‘NULL‘

    2、这时浏览器返回结果,会有明显的延迟

 

 

 

 

备注:该测试用到的数据库为mysql数据库,sql语句都是针对mysql。其他数据库的测试方式大同小异,只要思路正确就一切ok。

备注:sqlmap工具听说挺不错,可以试试。

 

《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞

标签:

原文地址:http://www.cnblogs.com/sustudy/p/4654943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!