解题思路
打开发现是很简单的页面,告诉了表名和列名,只需知道字段即可
尝试一下,输入1,2都有内容,后面无内容。输入1'让他报错,发现返回bool(false)
大概思路就是布尔型注入了,通过不断返回正确值,猜测对应字段
fuzz
通过fuzz发现,482长度的被禁了,472长度的可以使用,也就是说禁用了空格,union,or,and等
那就有点难办了,联合注入被禁,报错注入被禁
首先我们先不看过滤,应该选择的sql语句位为
select ascii(substr((select flag from flag),1,1)) ) >1 %23
由于空格被禁,我们使用括号或者tab替换空格
select(ascii(substr((select(flag)from(flag)),1,1)))>1%23
由于or被禁,并且不知道为什么单独使用||可以,但是与sql语句组合就不行了
爆破
这里网上有两种方法,异或和if
1.if
if(ascii(substr((select(flag)from(flag)),1,1))>1,1,2)
如果不会脚本的话,通过bp的intruder模块,同样可以爆破求出flag值,无非就是麻烦一点,ascii码转换成字符的形式,但其实和写脚本应该差不太多,
(平台应该是对访问做了限制,这里线程需要设置的低一些)
2.异或
通过0与任何异或结果就是他本身的思想
0^(ascii(substr((select(flag)from(flag)),1,1))>1)
脚本
网上有很多现成的脚本,这里就不再贴上来了,虽然自己写脚本能力差,但是希望能够学习到其他大佬的脚本,而不是贴到自己这,当一个脚本小子
总结思路
- 常规的布尔盲注,根据回显爆破
- 需要根据一些过滤,进行相应的更改
知识点
- 布尔盲注