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

系统 1649 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、查看浏览器输出结果,将发现 id 1 的数据被输出

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

    1 、在浏览器输入地址

       

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

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

 

 

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

  正常运行流程:

     1 、在浏览器输入地址

        

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

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

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

    1、在浏览器输入地址

       

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

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

 

 

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

  正常运行流畅:

    1 、在浏览器输入地址

       

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

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

  非正常运行流程:

    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、查看浏览器输出结果,将发现 id 3 的数据被显示出来

  非正常运行流程:

    1、在浏览器输入地址

       

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

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

 

 

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

  正常运行流程:

    1、在浏览器输入地址

       

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

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

  非正常运行流程:

    1、在浏览器输入地址

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

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

 

 

 

 

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

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

 

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论