1. 程式人生 > 其它 >SQL注入繞WAF

SQL注入繞WAF

如果有原始碼白盒針對性的繞waf,如果沒有,進行以下黑盒繞過嘗試。

架構層繞WAF

(1)使用者本身是進入waf後訪問web頁面的,只要我們找到web的真實IP,即可繞過waf。但是如果網站設定了只允許域名訪問,而域名解析到waf IP那麼則無法繞過。只能其他角度出發繞過

(2)在同網段內,頁面與頁面之間,伺服器與伺服器之間,通過waf的保護,然後展示給我們,只要我們在內部服務之間進行訪問,即可繞過waf。

(3)邊界漏洞,同樣類似於同網段資料,我們可以利用已知伺服器存在的ssrf漏洞,將資料直接傳送給同網段的web2進行SQL注入。

資源限制角度繞WAF

​ 有的時候,由於資料太大,會導致waf無法將所有的資料都檢測完,這個時候會忽略掉我們代入的sql注入語句,從而繞過waf,即:使用POST請求,對伺服器請求很大資源逃逸sql注入語句。使用Burpsuite直接轉換請求方式。

協議層面繞過WAF

(1)基於協議層,有的waf只過濾GET請求,而對POST請求沒做別的限制,因此,可以將GET型換為POST型。如上圖。

(2)檔案格式(協議未覆蓋),頁面僅對Content-Type為application/x-www-form-urlencoded資料格式進行過濾,因此我們只要將Content-Type格式修改為multipart/form-data,即可繞過waf。

(3)引數汙染:有的waf僅對部分內容進行過濾,例如:

index.php?id=1&id=2&id=3

這樣的引數id=1,waf也許僅對前部分的id=1進行檢測,而後面的引數並不做處理。這樣我們就可以在id=2的後面寫入sql注入語句進行sql注入。

規則層面繞過WAF

(1)關鍵詞大小寫繞過,有的WAF因為規則設計的問題,只匹配純大寫或純小寫的字元,對字元大小寫混寫直接無視,這時,我們可以利用這一點來進行繞過。

​ 舉例: union select ---> UnIOn SeLEcT

(2)編碼繞過, 針對WAF過濾的字元編碼,如使用URL編碼,Unicode編碼,十六進位制編碼,Hex編碼等。

​ 舉例:union select 1,2,3# =union%0aselect%0a1%2C2,3%23 “ ,”可以用%2C替換

(3)雙寫繞過,部分WAF只對字串識別一次,刪除敏感欄位並拼接剩餘語句,這時,我們可以通過雙寫來進行繞過。

​ 舉例:UNIunionON ,SELselectECT anandd

(4)換行(\N)繞過

​ 舉例:select * from admin where username = \N union select 1,user() from admin

(5)註釋符內聯註釋繞過,註釋符裡感嘆號後面的內容會被mysql執行。(只在mysql中執行)

舉例:union selecte =/\*!union\*/ select

(6) 同義詞替換

and:&&

or+||

=(等於號):<、>

空格:
在mysql下,替換字元有 %09,%0A,%0B,%0C,%0D,%20,%A0,/\*xx\*/,+
正則,替換字元 %09,%0A,%0B,%0C,%20

version():@@version

datadir():@@datadir

擷取字元:
mid()  mysql、access
substr()    oracle、mysql、sqlserver.
substring()     mysql、sqlserver

#&&與||這種特殊的符號 一定要在瀏覽器url前進行轉碼之後方可提交 因為瀏覽器預設不會進行編碼
&& 1=1  轉碼 %26%261=1
-1||1=1 轉碼-1 %7c%7c1=1

(7) 垃圾引數

​ WAF在設計的時候都會考慮到效能問題,檢測資料包的包長或檢測資料流長度,有一個限制。因此在設計WAF的時候可能就有一個預設值,預設多少個位元組的流大小,或是多少個數據包。此時可以填充資料,達到一定數目之後,POST中的sql注入惡意程式碼沒有被檢測了,達到了bypass的目的。

http://127.0.0.1/sqllab/Less-2/?id=1 and id=0xA*1000 uNiOn SeLeCt 1,version(),3 --+

a=AAAAAA*[很多個A] &id=1 order by X[1-3]
//0xA*1000  指的是0XA後面的 "A" 重複1000次

(8)分塊傳輸(可以組合協議未覆蓋)

在burp中關閉自動補全,刪掉Content-Length: xx欄位,新增Tranfer-Enconding: chunked就代表是分塊傳輸了,下面字元依次類推,注意結束時有兩個空行。只有能接收POST請求的物件可以使用這種方式。

直接使用burp外掛方便快捷,專案地址:https://github.com/c0ny1/chunked-coding-converter

(9) mysql特殊語法

舉例:union select 1,2,{x user}from{x mysql.user}

參考文章

https://www.cnblogs.com/sunny11/p/14438269.html#_label2

https://www.cnblogs.com/cute-puli/p/11146625.html

https://saucer-man.com/information_security/100.html