常見WAF繞過思路


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,因為是最新放出來的,而且后門我還沒分析成功,不知道有沒有后門,就先不放給大家了。如果大家需要的話,可以后台留言,我私發給你。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM