分塊傳輸繞過WAF
- 2019 年 10 月 6 日
- 筆記
在介紹WAF繞過技術之前,我們必須要要搞明白一個問題,那就是WAF為什麼會存在被繞過的風險?這是因為WAF對數據包的解析和Web伺服器對數據包的解析兩者之間存在差異,所以存在被繞過的可能。下面列出了一些在SQL注入過程中主流的WAF繞過技術:
1、參數污染
2、URL重寫
例如:http://localhost/uyg/id/123+or+1=1/tp/456
3、加密payload(例如:MD5、SHA-1、自定義加密)
4、緩衝區溢出
5、編碼繞過
6、特殊字元插入(%00)
7、異常HTTP請求包(例如:超級大,不符合HTTP規範但被server容錯的數據包)
8、數據包分塊傳輸方式Transfer-Encoding:chunked
這次就給大家分享一下分塊傳輸繞過WAF的經驗。
分塊傳輸是什麼?
在HTTP0.9中,響應包的結束只是簡單的依賴於TCP的連接斷開。在HTTP 1.0的響應頭增加了一些欄位,比如,Content-length用於表示響應包的大小,但卻只有在伺服器預先知道HTTP頭長度的情況下,才能確定Content-length的值。這就意味著如果發送的是動態的內容,那麼首先需要快取數據,在發送前必須要計算出要發送的HTTP頭的大小。否則如果依舊按過去的方式,可能TCP連接斷開的時候,數據還沒有傳輸完,這時候就不得不中斷數據傳輸,要解決這種情況就不得不讓TCP連接一直保持活躍狀態。
首先測試一下正常不加waf的情況:發現是字元型注入。
我的payload構造是id=1』 and1=1#

id=1』 and 1=2#

以及一些其他的手工注入語句,這裡不再詳細說,這裡說一下union select 1,database(),version()#

然後再裝上waf,可以看到被攔截了。

然後:數據包頭中添加Transfer-Encoding:chunked進行分塊傳輸,將注入的內容進行分塊,發現是可以進行繞過的。



分塊傳輸還有很多有趣的玩法,歡迎各位朋友一些交流學習。
作者:cong9184
來源:Ms08067安全實驗室