WAF,全稱(chēng):Web Application Firewall,也稱(chēng)為網(wǎng)站應(yīng)用級(jí)入侵防御系統(tǒng)。
大白話的說(shuō),就是利用它內(nèi)設(shè)的安全策略來(lái)為web應(yīng)用程序提供保護(hù)的一款產(chǎn)品,那么對(duì)于我們來(lái)說(shuō),如果突破它的安全策略就顯得尤為重要。
作為滲透測(cè)試人員都知道,在滲透的過(guò)程當(dāng)中,最核心的就是構(gòu)造自己的輸入,然后分析目標(biāo)返回的結(jié)果,從而判斷出是否存在相應(yīng)的問(wèn)題。
那么WAF的基礎(chǔ)檢測(cè)機(jī)制也基于此——檢測(cè)用戶輸入的內(nèi)容,如果輸入的內(nèi)容中包含了一些危險(xiǎn)字符,或者說(shuō)有威脅性的字符,那么WAF就會(huì)對(duì)此進(jìn)行攔截。
所以說(shuō),改變我們輸入的內(nèi)容形式,就是突破WAF的關(guān)鍵點(diǎn)。
sql注入繞WAF的N種姿勢(shì)
1.雙寫(xiě)繞過(guò)
有些waf會(huì)對(duì)關(guān)鍵詞進(jìn)行過(guò)濾,若只過(guò)濾1次,則可以雙寫(xiě)繞過(guò)。

2.等號(hào)like繞過(guò)
有的waf會(huì)對(duì)等于號(hào)進(jìn)行攔截和過(guò)濾。

3.order by 繞過(guò)
當(dāng) order by 被過(guò)濾時(shí),可以使用 into 變量名進(jìn)行代替。
4.and/or繞過(guò)
主流的 waf 都會(huì)對(duì)and 、or、xor進(jìn)行攔截。替代字符:and 等于&&、or 等于 ||、not 等于 !、xor 等于|

5.union select 繞過(guò)
waf 會(huì)針對(duì)union select 進(jìn)行攔截。
uNIoN sel<>ect # 程序過(guò)濾<>為空 腳本處理
uNi//on sele//ct # 程序過(guò)濾//為空
uNIoN /!%53eLEct/ # url 編碼與內(nèi)聯(lián)注釋
uNIoN se%0blect # 使用空格繞過(guò)
uNIoN sele%ct # 使用百分號(hào)繞過(guò)
uNIoN %53eLEct # 編碼繞過(guò)
uNIoN sELecT 1,2 #大小寫(xiě)繞過(guò)
uNIoN all select 1,2 # ALL繞過(guò)
uNIoN DISTINCT select 1,2 # 去重復(fù)DISTINCT 繞過(guò)
null+UNION+SELECT+1,2 # 加號(hào)代替空格繞過(guò)
/!union//!select/1,2 # 內(nèi)聯(lián)注釋繞過(guò)
/!50000union//!50000select/1,2 # 內(nèi)聯(lián)注釋繞過(guò)
uNIoN//select/**/1,2 # 注釋代替空格繞過(guò)
6.大小寫(xiě)繞過(guò)
對(duì)關(guān)鍵詞設(shè)置為大小寫(xiě)即可。 ps:圖中冒號(hào)起閉合作用,%00起截?cái)嘧饔,都和注釋含義類(lèi)似。

7.逗號(hào)繞過(guò)
有些防注入腳本都會(huì)逗號(hào)進(jìn)行攔截。變換函數(shù)的形式,比如 substr(database(),1,1)—> substr(database() from 1 for 1) ;limit 0,1 —> limit 1 offset 0
8.等函數(shù)替換
當(dāng)常用函數(shù)被waf攔截時(shí),可以使用偏僻函數(shù)或者功能相同的其他函數(shù),比如substr()函數(shù)被攔截,就可以使用mid函數(shù);報(bào)錯(cuò)注入的updatexml()用polygon()函數(shù)替換。
9.浮點(diǎn)數(shù)繞過(guò)
通過(guò)浮點(diǎn)數(shù)的形式從而繞過(guò)。id=1 union select —> id=1.0union select —> id=1E0union select

10.添加庫(kù)名繞過(guò)
有些 waf 的攔截規(guī)則 并不會(huì)攔截[庫(kù)名].[表名]這種模式。
11.ascii編碼繞過(guò)
waf有的時(shí)候會(huì)對(duì)截取的字符攔截,可以使用ascii編碼對(duì)比進(jìn)行繞過(guò)。

12.base64編碼繞過(guò)
waf有的時(shí)候會(huì)對(duì)截取的字符攔截,可以將注入的語(yǔ)句進(jìn)行base64編碼進(jìn)行繞過(guò)

13.空格字符繞過(guò)
空格字符可以混淆WAF的檢測(cè)機(jī)制。%20=%a0=%09=%0a=0b=%0c=%0d=+

14.引號(hào)字符繞過(guò)
若單引號(hào)被攔截,則使用雙引號(hào),若都被攔截,就嘗試使用hex六進(jìn)制編碼,也可以考慮寬字節(jié)注入繞過(guò)

15.參數(shù)污染
在 php 語(yǔ)言中 id=1&id=2 后面的值會(huì)自動(dòng)覆蓋前面的值,不同的語(yǔ)言有不同的特性。可以利用這點(diǎn)繞過(guò)一 些 waf 的攔截。以下是其他污染特性

以下是其他污染特性:

16.注釋繞過(guò)
內(nèi)聯(lián)注釋?zhuān)菏荕ysql為了保持與其他數(shù)據(jù)的兼容,將Mysql中特有的語(yǔ)句放在/!/中這些語(yǔ)句在不兼容的數(shù)據(jù)庫(kù)中不執(zhí)行,而在Mysql自身卻能識(shí)別執(zhí)行。例如:/!50001/表示數(shù)據(jù)庫(kù)版本>=5.00.01時(shí),/!50001 中間的語(yǔ)句才能被執(zhí)行 /
17.臟數(shù)據(jù)溢出繞過(guò)
數(shù)據(jù)太多超過(guò)waf檢測(cè)范圍,然后造成繞過(guò),前面填垃圾數(shù)據(jù)后面填要注入的SQL語(yǔ)句,如果是GET傳參,參數(shù)值超過(guò)GET所能運(yùn)行的長(zhǎng)度可能無(wú)法利用,所以最好是POST傳參(前提是對(duì)方支持POST傳參)

18.pipline繞過(guò)
http協(xié)議是由tcp 協(xié)議封裝而來(lái),當(dāng)瀏覽器發(fā)起一個(gè) http 請(qǐng)求時(shí),瀏覽器先和服務(wù)器建立起連接tcp連接,然后發(fā)http 數(shù)據(jù)包,其中包含了一個(gè)Connection字段,一般值為close,apache等容器根據(jù)這個(gè)字段決定是保持該tcp連接或斷開(kāi)。
當(dāng)發(fā)送的內(nèi)容太大,超過(guò)一個(gè)http包容量,需要分多次發(fā)送時(shí),值會(huì)變成keep-alive,即本次發(fā)起的http請(qǐng)求所建立的tcp連接不斷開(kāi),直到所發(fā)送內(nèi)容結(jié)束Connection為close為止。
用burpsuite抓包提交復(fù)制整個(gè)包信息放在第一個(gè)包最后,有些waf會(huì)匹配第二個(gè)包的正屬于正常參,不會(huì)對(duì)第一個(gè)包的參數(shù)進(jìn)行檢測(cè),這樣就可以繞過(guò)一些waf攔截。
19.分塊傳輸繞過(guò)
分塊傳輸編碼是只在HTTP協(xié)議1.1版本中提供的一種數(shù)據(jù)傳送機(jī)制。
以往HTTP的應(yīng)答中數(shù)據(jù)是整個(gè)一起發(fā)送的,并在應(yīng)答頭里Content-Length字段標(biāo)識(shí)了數(shù)據(jù)的長(zhǎng)度,以便客戶端知道應(yīng)答消息的結(jié)束。分塊傳輸編碼允許服務(wù)器在最后發(fā)送消息頭字段。
例如在頭中添加散列簽名。對(duì)于壓縮傳輸傳輸而言,可以一邊壓縮一邊傳輸,將本該一次性傳輸?shù)耐暾麛?shù)據(jù)分塊傳輸,從而繞過(guò)waf的檢測(cè)。

20.參數(shù)拆分繞過(guò)
配合多個(gè)參數(shù)的傳參,將注入的內(nèi)容拼接到同一條 SQL 語(yǔ)句中,可以將注入語(yǔ)句分割插入繞過(guò)waf攔截。
21.GET/POST轉(zhuǎn)換繞過(guò)
waf 在對(duì)危險(xiǎn)字符進(jìn)行檢測(cè)的時(shí)候,分別為 post 請(qǐng)求和 get 請(qǐng)求設(shè)定了不同的匹配規(guī)則,請(qǐng)求被攔截,變 換請(qǐng)求方式有幾率能繞過(guò)檢測(cè)。

22.白名單繞過(guò)
有些 WAF 會(huì)自帶一些文件白名單,對(duì)于白名單 waf 不會(huì)攔截任何操作,比如白名單目錄,白名單文件等等,所以可以利用這個(gè)特點(diǎn),可以進(jìn)行突破。
23.花括號(hào)繞過(guò)
花括號(hào),左邊是注釋的內(nèi)容,這樣的話可以過(guò)一些waf的攔截。
24.反引號(hào)繞過(guò)
特殊符號(hào)反引號(hào)也能繞過(guò)waf

申明:本文內(nèi)容僅用于網(wǎng)絡(luò)安全的技術(shù)討論,禁止用于違法途徑.