dvwa学习之 sql盲注

盲注是什么

盲注是区别普通注入,普通sql注入可以看见报错的sql信息,盲注是看不见任何报错的信息,无法知道注入的语句有没有被执行,页面无明显变化,所以叫盲注

盲注有哪些方法

虽然页面没有明显变化但是通过你的fuzz还是会产生一定差别,比如输入正常的值产生正常页面,反之通过注入数据库函数bool语句观察页面变化,如果sql注入成功数据库是需要时间去执行的,所以还可以通过观察时间来判断。因此就有最基本的两种盲注办法:bool注入, 通过延时注入

  1. 延时注入 比如mysql sleep函数 观察时间
  2. bool注入 利用sql语句逻辑运算和数据库函数进行fuzz测试

盲注流程

  1. 寻找注入点
  2. 判断注入数据类型 字符型 还是数值型
  3. 通过观察页面变化选择合适的注入方式(延时注入或Bool)
  4. 通过二分法一步步猜解当前数据库名
  5. 猜解数据库中的表名
  6. 猜解表中的字段名
  7. 猜解数据

盲注场景举例

以dvwa举例,(如何搭建dvwa docker docker docker 一键搞定)打开dvwa 点击建立好数据库以后,选择模式,low模式的盲注。dvwa sql 注入都是基于php语言的,源码也都php。

low

假设你不知道它是low模式,也没有看源码,只知道这是一个php写的页面。找到注入点(就是数据与服务器交互的地方)
http://127.0.0.1/vulnerabilities/sqli_blind/?id=1&Submit=Submit#
输入 1
在这里插入图片描述
说明 1这个数值是可以填入数据库成功运行的,但是还不能判断 是字符型 还是数值型。php语言的sql查询语句大概是:

```
 $id = $_GET[ 'id' ];
// Check database
$getid  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";  //传入字符型
$result = mysql_query( $getid ); 
```

为什么要判断是数字型或字符型呢 因为 ’ xxxx’如果是字符型 你只有把’闭合了才能写其他注入语句比如查看数据库名巴拉巴拉,不然无法进行注入操作。
如果闭合了’注入能执行成功就证明 是字符型

    比如输入 1 ' #  原来的sql语句就变成了:
    "SELECT first_name, last_name FROM users WHERE user_id =  ' 1 ' #';  ";
   /# 是sql注释作用 可以成功注释掉后面的' ;不影响sql运行 ,单行的sql语句不需要;多行可能需要;

然后会看见 在这里插入图片描述
说明它是字符型注入。后面的是自己看dvwa盲注

mid

只说不一样的东西,源码里有个函数 对用户输入进行了处理:mysql_real_escape_string() 这个函数会对特殊符号进行转义,转义就会变成普通的字符串了不能起到作用,比如输入’ 就会变成/’ 但是这个是数字型注入所以这个函数用处不大。但是不看源码谁知道是数字型。
所以 判断过程少不了。
怎么绕过mysql_real_escape_string()函数呢 可以通过宽字节注入 hex进行绕过。但是在这个地方行不通因为宽字节注入有前提。
具体看dvwa盲注

high

没有什么好玩的 不值得说

细节解析

  1. 渗透测试需要信息收集,加单引号这种操作放在php这种弱类型语言很正常,放其他语言不一定了
  2. 宽字节注入主要是用来绕过’过滤,它是在mysql编码为gbk情况下,gbk认为汉字是两个字节同时第一个字节必须ascii大于128,比如%df ascii大于128 在php代码里输入 %df’ 经过mysql_real_escape_string()函数 就会变成 %df/’ 进行mysql里的时候,因为如果mysql编码是gbk,它就会认为 %df/ 是一个汉字整体 '就成功逃走了。
    详细看宽字节注入
    二次编码注入,比如通过urlcode 因为php会对传入的东西进行urlcode解码,如果输入1%2527%23 解码以后就是 1%27 ,用户输入【1%2527】=>php自身编码,%25转换成%【1%27】=>php未检查到单引号,不转义【1%27】=>遇到一个函数编码,使代码进行编码转换【1’】=>带入sql语句=>能注入
  3. 宽字节注入可以使用sqlmap 里temper脚本 比如: sqlmap.py -u “xxx?id=xx” --tamper unmagicquotes.py --dbs

这些方法都具有前提,所以需要fuzz 和编码人员习惯关系很大。渗透测试难怪叫测试。

参考:https://www.cnblogs.com/Rain99-/p/10592772.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值