HTTP協議層面繞過WAF


最近也是在一直看過waf相關的資料,本次主要是想寫寫HTTP協議層面過WAF的一些技巧,來與大家一同探討

原理

給服務器發送payload數據包,使得waf無法識別出payload,當apache,tomcat等web容器能正常解析其內容。如圖所示

 

 

 

實驗環境

本機win10+phpstudy2018+某狗web應用防火牆最新版

本次演示的站點是我自己用php寫的一個post型sql注入類型的站

安全狗需要做一下配置

 

 

 

 

 勾選檢測POST,就可檢測post類型的注入

 

 

發現發送post請求的payload被攔截

一、利用pipline繞過[該方法經測試會被某狗攔截]

原理

http協議是由tcp協議封裝而來,當瀏覽器發起一個http請求時,瀏覽器先和服務器建立起連接tcp連接,然后發送http數據包(即我們用burpsuite截獲的數據),其中包含了一個Connection字段,一般值為close,apache等容器根據這個字段決定是保持該tcp連接或是斷開。當發送的內容太大,超過一個http包容量,需要分多次發送時,值會變成keep-alive,即本次發起的http請求所建立的tcp連接不斷開,直到所發送內容結束Connection為close為止。

1. 關閉burp的Repeater的Content-Length自動更新,如圖四所示,點擊紅圈的Repeater在下拉選項中取消update Content-Length選中。這一步至關重要!!!

 

2. burp截獲post提交

id=1 and 1=1

被WAF攔截

 

 

3.重新構造數據包

將數據包的Content-Length的值設置為id=2+and+1%3D2的長度即為12,最后將Connection字段值設為keep-alive。提交后如圖所示,會返回兩個響應包,分別對應兩個請求。

 

注意:從結果看,第一個正常數據包返回了正確內容,第二個包含有效載荷的數據包被某狗waf攔截,說明兩數據包都能到達服務器,在面對其他waf時有可能可以繞過。無論如何這仍是一種可學習了解的繞過方法,且可以和接下來的方法進行組合使用繞過。

 

二、利用分塊編碼傳輸繞過[該方法可繞某狗]

原理

 

在頭部加入 Transfer-Encoding: chunked 之后,就代表這個報文采用了分塊編碼。這時,post請求報文中的數據部分需要改為用一系列分塊來傳輸。每個分塊包含十六進制的長度值和數據,長度值獨占一行,長度不包括它結尾的,也不包括分塊數據結尾的,且最后需要用0獨占一行表示結束。

 

1. 開啟上個實驗中已關閉的content-length自動更新。給post請求包加入Transfer-Encoding: chunked后,將數據部分id=1 and 1=1進行分塊編碼(注意長度值必須為十六進制數),每一塊里長度值獨占一行,數據占一行如圖所示。

 

將上面的數據包 id=1 and 1=1 改為 id=1 and 1=2

 

沒有回顯,說明payload生效

注意:分塊編碼傳輸需要將關鍵字and,or,select ,union等關鍵字拆開編碼,不然仍然會被waf攔截。編碼過程中長度需包括空格的長度。最后用0表示編碼結束,並在0后空兩行表示數據包結束,不然點擊提交按鈕后會看到一直處於waiting狀態。

 

三、協議覆蓋WAF繞過

首先將數據包轉換為文件上傳包格式,使用bp工具change body encoding

 

 

 

 

 

 

 

繞過

1.添加參數filename,filename =1.jpg,等於號前需要加個空格

 

 

 

2.加雙引號繞過

 

 

 

3.邊界混淆繞過

這是原始的邊界

 

 

 

 

 

進行混淆后

 

 

 

或者有

 

 

四、分塊編碼+協議未覆蓋組合繞過

在協議未覆蓋的數據包中加入Transfer-Encoding: chunked ,然后將數據部分全部進行分塊編碼

附上我的payload吧

3
--8
22

Content-Disposition: name="id"

5

-1 
1
u
6
nion s
6
elect 
8
1,2,data
6
base()
9

--8--

0


 

最后用0表示編碼結束,並在0后空兩行表示數據包結束,不然點擊提交按鈕后會看到一直處於waiting狀態。

 

五、Content-type編碼繞過

利用特殊編碼對payload進行轉義,從而繞過WAF對特殊關鍵詞的過濾

 

六、http頭格式的繞過

http頭部的問題導致各種奇怪的格式繞過

如:

 

 

Host字段回車加TAB

 

 

混亂特殊字符繞過

 

 

注意:只能位於chunked字符之前加入字符

 

 

加入雙::號

 

 


免責聲明!

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



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