Boolean注入
有些情况下,开发人员屏蔽了报错信息,导致攻击者无法通过报错信息进行注入的判断。 这种情况下的注入,称为盲注。 盲注根据展现方式,分为boolean型盲注和时间型盲注。
Boolean是基于真假的判断(true or false); 不管输入什么,结果都只返回真或假两种情况; 通过and 1=1和and 1=2可以发现注入点。
Boolean型盲注的关键在于通过表达式结果与已知值进行比对,根据比对结果判断正确与否。
布尔注入:
检查是否存在sql注入:
综上可知:存在布尔注入。
判断数据库名长度:
综上可知数据库名长度为4
判断数据名:
方法一:通过substr()函数手动26个字母挨个测试
综上可得,数据库名为‘test’
方法二:通过ascii()函数手动26个字母挨个测试
由方法一的结论数据库名'test',此处只拿第一个字母进行验证
ASCII一览表
ASCII表中字母t对应的ASCII值
由此可知第一个字母对应的ascii值为116
查表可得第一个字母为't'
剩下的字母同理
该测试过程同样可以用方法三中的burpsuite进行自动测试
选择一个密码本(此处选择的1~1000,实际上只需要1~200就行了)
故值骤变处的ASCII值为116,结合查表可知,第一个字母为't'
方法三:利用burpsuite自动化测试
启用火狐浏览器代理
打开拦截
选中t并添加$
第一个转变的地方为't',故数据库名的第一个字母为't'
第二个字母:
改成2和重复上述步骤可得
故数据库名的第一个字母为'e'
第三个字母:
故数据库名的第一个字母为's'
第四个字母:
故数据库名的第一个字母为't'
综上可知,数据库名为'test'
判断数据库test中的表名
首先判断第二个表名的长度:
故第二个表名的长度5
利用burpsuite自动测试:
第一个字母:
第二个字母:
第三个字母:
第四个字母:
第五个子母:
综上所述,第二个表名为'users'
运用以下命令并套用上述步骤可以得出第一个表名:person
http://127.0.0.1/web/sql/boolean.php?id=1' and length((select table_name from information_schema.tables where table_schema='test' limit 0,1))>=6 --+
运用以下命令并重复述步骤可以得出第三个表名:xss
http://127.0.0.1/web/sql/boolean.php?id=1' and length((select table_name from information_schema.tables where table_schema='test' limit 3,1))>=3 --+
根据下图运行结果可知,该数据库中只有三个表person、users、xss
判断出表users中的所有字段名:
第一个字段名:
判断第一个字段名的长度:
综上可知第一个字段名的长度为2
运用burpsuite自动化测试出第一个字段的名字:
故第一个字段名的第一个字母是i
故第一个字段名的第二个字母是d
综上,第一个字段名是'id'
第二个字段名:
判断第二个字段名的长度:
综上可知第二个字段名的长度为8
运用burpsuite自动化测试出第二个字段的名字:
综上,第二个字段名是'username'
第三个字段名:
判断第三个字段名的长度:
故而第三个字段名的长度为8
运用burpsuite自动化测试出第三个字段的名字:
综上,第三个字段名是'password'
同理利用burpsuite获得数据:
找第一个id的长度:
故而第一个id只有一位数字
求出具体id:
故第一个id为1
判断第一个id对应的username的长度:
故而第一个username有8位
利用burpsuite逐个测试出username:
综上,第一个username是‘ZHaNGSAN’
判断第一个数据对应的password的长度:
故第一个password的长度为14
利用burpsuite自动逐个测试出密码:
由于后面测试步骤相同,不宜一做列举了
最后得出第一个password为‘AHANGSANDEMlMA’
综上可得:第一个id-username-password为1-ZHaNGSAN-AHANGSANDEMlMA
剩下的用户数据重复上述步骤,通过length()函数判断是否存在下一位数据,若存在则顺带得出垓数据的长度。
再通过substr()函数逐个判断出具体数据。
(此处仅得出来第一个数据的id,username和password,后续数据略)