Pikachu布尔盲注结合BurpSuite获取数据库名字详解
目录
1. 布尔盲注的概念
有些情况下,开发人员屏蔽了报错信息,导致攻击者无法通过报错信息进行注入的判断。这种情况下的注入,称为盲注。盲注根据展现方式,分为布尔型盲注和时间型盲注。
布尔盲注是基于真假的判断(true or false); 不管输入什么,结果都只返回真或假两种情况; 通过and 1=1和and 1=2可以发现注入点。
2. 复现流程
2.1 发现注入点
如图,是Pikachu布尔盲注的界面
已知里面有个用户名字叫做allen
,那么我们在allen
后面添加and 1=1和and 1=2试试,如下图。
从上述2张图片,不难看出,我们可以通过控制输入的内容来控制网页后端输出的内容。
2.2 尝试其他sql注入方式
以联合查询为例,结果如下图
allen' union select 1,2 -- s
发现无法使用,那么我们就只能使用盲注了。
2.3 判断数据库长度
allen' and length(database())>6 -- s
allen' and length(database())>7 -- s
allen' and length(database())=7 -- s
大家可以就像这么慢慢猜,用二分法去把数据库的长度试出来
2.4 爆破数据库名字
在这里,因为是靶场,所以我们直接结合着BurpSuite的暴力破解直接把数据库名字爆破出来。
所用函数
-
ascii()
-
substr() 字符截取函数
思路
利用substr()函数一个字一个字的截取数据库database(),用ascii()函数去转换成ascii码。
代码
allen' and ascii(substr(database(),1,1))=112 -- s
注:
因为大家都知道pikachu靶场的数据库名字是pikachu,所有我直接查询p
的ascii码112
2.5 Bp抓包、爆破数据库
我们利用Bp(BurpSuite)抓包,发现如下图。
废话不多说,直接Ctrl+I,开始爆破
然后添加标记,此时我们应该思考的问题是,应该在哪里进行爆破呢?其实有2个点
-
已知数据库长度为
7
,所以截取函数最大应该为7 -
ascii码表应该从
33
爆破到127
(这个为什么大家看看ascii码表就可以了)
完成后,如下图
上面的攻击模式设置第4个,集束炸弹模式!!!
然后就是设置payload,第二个同理
点击右上角start attack
,结果如下图所示
发现刚好有7个对应着1至7,所以我们把它解码出来
3. 总结
其实当时我对于布尔盲注一直都是认为是一个一个的去把答案试出来,但是在看到了这个方法后,才觉得是我孤陋寡闻了,如果各位看客还有其他更好的解法欢迎大家在评论区讨论或者私信我。