WAF分類
0x01 雲waf
在配置雲waf時(通常是CDN包含的waf),DNS需要解析到CDN的ip上去,在請求uri時,數據包就會先經過雲waf進行檢測,如果通過再將數據包流給主機。
0x02 主機防護軟件
在主機上預先安裝了這種防護軟件,可用於掃描和保護主機(廢話),和監聽web端口的流量是否有惡意的,所以這種從功能上講較為全面。這里再插一嘴,mod_security、ngx-lua-waf這類開源waf雖然看起來不錯,但是有個弱點就是升級的成本會高一些。
0x03 硬件ips/ids防護、硬件waf
使用專門硬件防護設備的方式,當向主機請求時,會先將流量經過此設備進行流量清洗和攔截,如果通過再將數據包流給主機。
02
WAF身份認證階段的繞過
WAF有一個白名單,在白名單內的客戶請求將不做檢測
0x01 偽造搜索引擎
早些版本的安全狗是有這個漏洞的,就是把User-Agent修改為搜索引擎,便可以繞過,進行sql注入等攻擊,這里推薦一個谷歌插件,可以修改User-Agent,叫User-Agent Switcher
0x02 偽造白名單特殊目錄
360webscan腳本存在這個問題,就是判斷是否為admin dede install等目錄,如果是則不做攔截,比如
GET /pen/news.php?id=1 union select user,password from mysql.user
可以改為
GET /pen/news.php/admin?id=1 union select user,password from mysql.user
或者
GET /pen/admin/..\news.php?id=1 union select user,password from mysql.user
0x03 直接攻擊源站
這個方法可以用於安全寶、加速樂等雲WAF,雲WAF的原理通過DNS解析到雲WAF,訪問網站的流量要經過指定的DNS服務器解析,然后進入WAF節點進行過濾,最后訪問原始服務器,如果我們能通過一些手段(比如c段、社工)找到原始的服務器地址,便可以繞過。
03
WAF數據包解析階段的繞過
0x01 編碼繞過
最常見的方法之一,可以進行urlencode。
0x02 修改請求方式繞過
大家都知道cookie中轉注入,最典型的修改請求方式繞過,很多的asp,aspx網站都存在這個問題,有時候WAF對GET進行了過濾,但是Cookie甚至POST參數卻沒有檢測。還有就是參數污染,典型例子就是multipart請求繞過,在POST請求中添加一個上傳文件,繞過了絕大多數WAF。
0x03 復參數繞過
例如一個請求是這樣的
GET /pen/news.PHP?id=1 union select user,password from MySQL.user
可以修改為
GET /pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user
很多WAF都可以這樣繞。
04
WAF觸發規則的繞過
WAF在這里主要是針對一些特殊的關鍵詞或者用法進行檢測。繞過方法很多,也是最有效的。
0x01 特殊字符替換空格
用一些特殊字符代替空格,比如在mysql中%0a是換行,可以代替空格,這個方法也可以部分繞過最新版本的安全狗,在sqlserver中可以用/**/代替空格
0x02 特殊字符拼接
把特殊字符拼接起來繞過WAF的檢測,比如在Mysql中,可以利用注釋/**/來繞過,在mssql中,函數里面可以用+來拼接,例如
GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
可以改為
GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')
0x03 注釋包含關鍵字
在mysql中,可以利用/*!*/包含關鍵詞進行繞過,在mysql中這個不是注釋,而是取消注釋的內容。
例如,GET /pen/news.php?id=1 union select user,password from mysql.user
可以改為
GET /pen/news.php?id=1 /*!union*/ /*!select*/ user,password /*!from*/ mysql.user
05
常見繞過WAF方法總結
0x01 大小寫轉換法
把大寫的小寫,小寫的大寫。比如:
SQL:sEleCt vERsIoN();
XSS:
出現原因:在waf里,使用的正則不完善或者是沒有用大小寫轉換函數。
0x02 干擾字符污染法
空字符、空格、TAB換行、注釋、特殊的函數等等都可以。比如下面的:
SQL:sEleCt+1-1+vERsIoN /*!*/ ();`yohehe
SQL2:select/*!*/`version`();
出現原因:利用網站使用的語言函數特性來繞過waf的規則或者使用會無視的字符。
0x03 字符編碼法
就是對一些字符進行編碼,常見的SQL編碼有unicode、HEX、URL、ascll、base64等,XSS編碼有:HTML、URL、ASCII、JS編碼、base64等等
SQL:load_file(0x633A2F77696E646F77732F6D792E696E69)
XSS:rip>
出現原因:利用waf的不完整性,只驗證一次字符串或者過濾的字符串並不完整。
本來想給大家分享個不錯的免殺PHP大馬基本無視各類waf,因為是最新放出來的,而且后門我還沒分析成功,不知道有沒有后門,就先不放給大家了。如果大家需要的話,可以后台留言,我私發給你。
