一、布尔盲注
可以进行SQL注入,但是不能通过SQL注入漏洞看到数据库中的信息,但是可以通过回显的真假判断数据库中的信息。
用到的函数:
Length()函数 返回字符串的长度
Substr()截取字符串,有三个参数,第一个是要截取的字符串,第二个是从第几个字符开始,第三个是一次截取多少个字符
二、做题
打开后还是熟悉的界面:
我们先输入1
:
只是返回了一个query_success,没有回显其他内容。输入1'
则返回了query_success。
于是我们只能一个一个猜他的名称。
我们可以通过length()函数来猜每个名称的长度,例如1 and length(database())>=4
,返回了:
而1 and length(database())>=5
则返回了:
证明当前使用数据库的名称长度为4,于是可以利用burpsuite来进行爆破猜出他的名称,先输入1 and substr(database(),1,1)='a'
,使用burpsuite抓包,然后将substr()的第二个参数和后面的a选中,添加负载:
爆破得到:
拿到数据库名称’sqli’。
接着输入1 and substr((select table_name from information_schema.tables where table_schema='sqli' limit 0,1),1,1)='a'
,还是burpsuite抓包,
拿到第一个表名news,将limit第一个参数改为1,如法炮制得到第二个表名flag,显然flag就在这个表中。
然后输入1 and substr((select column_name from information_schema.columns where table_name='flag' limit 0,1),1,1)='a'
,burpsuite抓包:
拿到flag表中的字段名flag。
之后这步我依旧是用burpsuite抓包爆破,输入1 and substr((select flag from flag),1,1)='a'
,但是flag足足40+位,爆破得到:
这么长,还是乱序的,眼睛都看花了。
后来在网上搜了一下其他人做的步骤,发现他们都是用的python爆破(留下菜鸡的眼泪),多学习吧!