确认并利用 SQL 盲注漏洞
一、8.5确认并利用 SQL 盲注漏洞(获取数据库当前用户名)
- 在 sql 盲注中,不会回显任何报错信息,需要通过一些问题语句询问数据库结果对错。
(一)8.5.1 环境准备
- 开启OWASP靶机和Kali虚拟机
- 打开burpsuite
- kali中登陆dvwa(用户名和密码都是 admin),进入 SQL Injection(Blind)盲注页面。
(二)环境配置-kali linux中firefox配置为127.0.0.1 8080
在Kali linux中将Firefox浏览器的Network Settings(网络配置)设置为127.0.0.1,端口8080,如下图示:
(三)8.5.2 基于错误的 SQL 注入案例
- 这个表单和上面的 sql 注入表单(SQL Injection)一模一样,输入 1,可以查看id 为 1 的用户信息。
- 现在输入 1’ 测试,发现并不像 sql 注入(SQL Injection)一样报错。
- 再输入 1’’ 看一下:
结果显示了 id 为 1 的用户信息,这说明前面测试的 1’是 web 应用已经预料到的错误,这里很可能会有 sql 盲注漏洞,来继续猜测。
- 输入一个结果总是为假的参数试一下:
输入 1’ and ‘1’='2
因为 1 不等于 2,所以结果总是为假。可以发现应用没有给出选择条件的结果。
- 接着构造一个始终为真的参数:
1’ and ‘1’='1
可以发现应用给出了 id 为 1 的结果。这说明该表单存在 sql 盲注漏洞,可以输入猜测的语句函数来观察应用返回的结果,通过这个方法可以一步一步猜解出想知道的内容。 - 在教程中,首先需要知道数据库的用户名,所以首先尝试一下这个语句:
1’ and 1=char_length(current_user()) and ‘1’='1
- 下一步找到 burpsuite 中的这个请求,并发送到 Intruder 模块
- 点击右侧的clear按钮,清空默认的攻击参数
- 接着就可以通过添加攻击参数来构造有效载荷
- 转到有效载荷(Payloads)内容,将有效载荷类型(Payload type)设置为 Numbers
- 将数值内容设置为 1-15,步数为 1
- 接着转到 Intruder 的 Settings 选项卡,清除 Grep 匹配(Grep-Match)列表,添加自己想要的回显字段,如:First name,来快速查看攻击结果。
- 开始攻击(Start attack)按钮,从攻击结果得知,用户名是 6 位数。
(步骤6-13:是为了利用burpsuite获取数据库当前用户名的长度) - 现在来猜解一下用户名的每个字符是什么。先猜测第一个,输入:
1’ and current_user LIKE 'a%
%是 sql 语句中的通配符,它可以匹配任何字符串。这个语句的意思是猜测第一个字母是不是 a - 同样的,把该请求发送到 intruder 模块,将 a 设置为改变参数。
- 转到有效载荷(Payloads)内容,将有效载荷类型(Payload type)设置为 Simple list
- 载荷列表是 a-z,1-9,和所有特殊符号的集合,需要自己构建。由于 sql 语句中的 select 查询不区分大小写,所以省略了大写字母。
- 接着转到 Intruder 的 Settings 选项卡,清除 Grep 匹配(Grep-Match)列表,添加自己想要的回显字段
- 开始攻击,从结果中发现第一个字母是 d
- 下面继续猜测第二个字符,将输入参数改为
1’ and current_user LIKE 'da% - 现在目标是 d 后面的字符。继续攻击,可以从结果中看到第二个字符是 v
- 下面继续猜解后面的字符。在结果中,你可能会发现%的结果总为 ture,这是因为%是通配符,它可以和任意一个字符匹配到。
最后测试出来的结果是 dvwa@%,最后一个%匹配的是空字符,所以用户名是 dvwa@ - 为了验证结果,把 like 替换为=:
1’ and current_user()='dvwa@%
结果显示找到了正确的用户名
(步骤14-23:是为了利用burpsuite获取数据库当前用户名)