分塊傳輸繞過WAF

  • 2019 年 10 月 6 日
  • 筆記

WAF作為一種安全產品為Web應用提供安全防護,可以增大攻擊者的攻擊難度和攻擊成本,這一點是不容至疑的。但是,WAF並不是萬能的,世界上沒有任何一款安全產品可以提供100%的安全防護。由於產品的設計或實現原理,及其他問題都有可能導致攻擊者可以成功繞過WAF的防護,來達到攻擊後端Web應用的目的。除了WAF自身的安全性以外,現在討論最多的就是WAF的繞過技術。

在介紹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安全實驗室