zoukankan      html  css  js  c++  java
  • 《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞

    看完《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工具听说挺不错,可以试试。

  • 相关阅读:
    比特币的加密算法
    区块链项目-Lisk
    以太坊(二)
    以太坊的货币发行模式
    以太坊(一)
    前端er们如何最快开发h5移动端页面?
    jQuery Ajax常用总结
    js中变量作用域
    网页引入特殊字体的几种方案
    几个有趣的WEB设备API(二)
  • 原文地址:https://www.cnblogs.com/sustudy/p/4654943.html
Copyright © 2011-2022 走看看