0x00 前言
現在,各個安全廠商的WAF越來越多了,雖然它們的WAF賣得挺貴,但是買的人也不少(運營商、互聯網企業、政府部門、傳統的產業)。因此我們也是經常碰到那麼多WAF啊,繞過WAF技術千姿百態,各種天花亂墜的的招數。有些招數對於V WAF繞得過,有些招數對於N WAF可以繞過,還有的招數對於哪個WAF都繞不過(自認倒霉吧,估計管理設置WAF策略的兄弟妹子也是一個高手,要不然就是他們請了大牛)。下面介紹一種繞過WAF的策略。
0x01 原因分析
Web應用防火牆(WAF)是Web應用程序深度防御模型的一部分。它雖然不是安全代碼的替代品,但卻提供了過濾惡意輸入的偉大選擇。這裡有一個實際的評估,其中部分企業部署的WAF是很容易被繞過,畢竟真正會部署WAF策略的運維人員也很少,基本上還是得靠安全廠商的工程師來運維。極差的設計或者錯誤的配置都會導致該WAF很容易被繞過。在應用程序生產部署時候,測試應用程序的安全性是很重要的。雖然這個應用程序可能在開發或質量保證進行了評估。但是當你們在部署它的時候,你可能會引入由於配置問題的新的攻擊向量。例如我們虛擬銀行Heisenberg
Bank.就是這種情況。
當執行起這個安全評估時,我快速地模糊測試了我平時會考慮到的所有應用程序終端點。截圖如下:
上圖是一個被WAF阻擋後,返回的頁面信息。經過一些調查後,我發現了本地機器是因為觸發了一些規則而被WAF攔截的,這些規則如下:
快速連續地使用POST請求表格
快速連續地使用GET去請求大多數的頁面
確實CSRF 標志
惡意字符
每當上面的任何一個條件得到滿足後,WAF會使用頁面錯誤代碼來阻止攻擊者進行訪問,阻擋時間為5分鐘。既然這樣,那麼我們應該如何去進行下一步昵?使用編碼載荷來繞過WAF正則匹配式的常規方法近來是行不通的,畢竟WAF已經走過漫長的歲月了。不過,我們可以聲東擊西。
在等待被WAF解開封鎖的期間,我決定做一些關於WAF的研究。在浏覽幾個WAF實施指南時,我發現了一個論壇曾提及到,使用緩存服務/設備去整合一個WAF。它的描述類似於用戶很費勁地站立起來,好像清漆纏身或在不同的主機上運行的代理/加速器裝置。然後該WAF擋住該服務器。當然,供應商毫不猶豫地回答道,你可以基於IP的設備部署白名單,讓這些IP不被WAF檢查。
在這一點上,一切都還是很好。接下來的正是Heisenberg Bank 及其WAF 表現不佳的地方。通過更多閱讀,我發現,WAF並不是在傳入的請求做了一個真正的查詢(類似於REMOTE_ADDR,或者其他類似的東西),WAF是在尋找一個*定制* HTTP標頭。在用戶或其他服務器連接到WAF的情況下,它的工作流程如下圖所示:
由圖我們得知,WAF並非真正地檢查請求的HTTP頭。而具體的實現是檢查頭部的X始發-IP請求。那麼,哪個設備應該被WAF配置為信任昵?在這種情況下,默認是WAF本身。
0x02 實際操作
因為我控制所有被發送浏覽器的HTTP請求,我可以輕松地添加這樣的HTTP頭去愚弄WAF認為我(攻擊者)是WAF它,讓我完全繞過它的保護功能:
經過進一步研究,這些HTTP頭有可能被WAF定義為白名單(而不是做一個適當的查找):
X-forwarded-for #把這個定義為緩存服務器
X-remote-IP #把這個定義為代理服務器,或者同網段IP
X-originating-IP #把這個定義為服務器主機的ip或者127.0.01
x-remote-addr #把這定義為內部IP,例如172段,或者192段,或者10段
我們可以通過各種信息偵察和調查發現,有些IP地址是處於WAF的白名單中的。 如下圖所示:
搞清楚繞過後,其余的評估取得了許多其他的漏洞和加快了速度,這得益於我可以繞過WAF。這就和攔截內聯代理頭並且把頭部添加到所有的請求一樣簡單。
一個簡單的解決方案是讓您的前端代理剝離所有帶非標准的HTTP頭,但那麼你還在玩貓捉老鼠的黑名單游戲。更妙的是,咨詢你的供應商WAF,看看什麼樣的頭可以被接受,默認被啟用。然後尋找一個不依賴於攻擊者可以偽造信息的解決方案。
一般來說,你也可以使用Gethead來審核您的網站的HTTP標頭的安全性。Gethead是我們的動態測試團隊的領導者Nathan LaFollette (@httphacker).的一個項目。該博客的一個真棒追隨者也做了一個burpsuite套件的擴展,將這些頭添加到您的所有請求
burpsuite WAF繞過插件下載地址 github地址:https://github.com/codewatchorg/bypasswaf
或者在burp主界面 extender -->>BApp Store-->>左側-->>下拉找到 BypassWAF
0x03 burpsuite插件bypasswaf
1 添加頭部到所有Burp請求來繞過某些WAF產品。這個擴展自動地將下列頭部添加到所有請求去。
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
2 用法與步驟:
添加該插件到burp
在burp中創建一個會話處理規則以此來激活該插件。
修改范圍以包括可應用的工具和URLs
開始測試
3使用截圖
參考文獻
http://www.securityaegis.com/bypassing-web-application-firewalls-using-http-headers/ https://github.com/codewatchorg/bypasswaf/blob/master/README.md