今天測試了一個網站,發現存在360webscan的攔截,于是便開始了一波“bypass”。
進入主題
1. 判斷注入點
使用“and 1=1”測試了一下,慘遭攔截。隨后又測試了一下or也是被攔截的。

但是按位異或運算(^)未被攔截也可以使用xor。
“按位異或運算”測試:
在這里先介紹下“按位異或運算”,這種測試注入點的方法最開始是看一位大佬發過,原諒我已經找不到這位大佬的文章了。但是這位大佬并未解釋使用這種方法的具體原理是什么,下面我給大家簡單介紹一下按位異或運算使用的基本規則:
1^1=0
1^0=1
0^0=0
具體原理參考:https://blog.csdn.net/zpy1998zpy/article/details/80667775
栗子:

在這里我們對我們的網站進行測試:
頁面正常payload:xxxnid=216^(1=1)^1



3. 使用“按位異或運算”判斷一下當前數據庫名稱的長度:
Payload:xxxnid=216^(1=(if(1=(length(database())=1 ),1,0)))^1
然后我們打開bp,將抓取到的數據包發送到intruder模塊,然后把數據庫長度值設置為變量。

payload type設置為numbers遍歷1-15這15個數字。

最終我們得到數據庫字段的長度為13。

4. 使用“按位異或運算”結合盲注來獲取數據庫名稱:
這里我們使用的是regexp正則注入,簡單介紹一下:
用法:select user() regexp ‘^[a-z]’;
這里是在匹配用戶名的第一位:

繼續匹配第二位的用法:select user() regexp ‘^r[a-z]’;
類似的盲注方法還有like匹配注入、left()函數、mid()函數、substr()函數等等。
構造Payload:xxxnid=216^(1=if(((database())regexp '^a ' ),1,0))^1
在這里我們將從數據庫的第一個字段開始進行盲注。

這里我們使用字典來爆破字段名稱,我們指定的字典內容包括常用的大小寫字母、特殊符號、數字等。在這里的時候我遇到了個坑,我使用的字典里沒加入數字,但是數據庫名稱里包含數字,導致我爆破到第三個參數的時候就沒有結果了,最后發現字典里沒把數字加進去,真的是賊菜。

爆破出數據庫的第一個參數是“p”。

依次爆破,最終我們得到了數據庫名稱。

5. 接下來就是構造獲取表名的payload了。
我們使用left()函數進行構造,先來看一個的栗子:
select left((select table_name frominformation_schema.tables where table_schema='test' limit 0,1),1)='u';

|