利用分塊傳輸繞WAF


分塊傳輸原理介紹

背景

HTTP Connection有兩種連接方式:短連接和長連接;
短連接即一次請求對應一次TCP連接的建立和銷毀過程。
長連接是多個請求共用同一個連接這樣可以節省大量連接建立時間提高通信效率。目前主流瀏覽器都會在請求頭里面包含Connection:keep-alive字段,該字段的作用就是告訴HTTP服務器響應結束后不要關閉連接,瀏覽器會將建立的連接緩存起來,當在有限時效內有再次對相同服務器發送請求時則直接從緩存中取出連接進行通信。當然被緩存的連接如果空閑時間超過了設定值(如firefox為115s,IE為60s)則會關閉連接。

長連接存在的問題

長連接也叫持續連接,短連接也叫非持續連接。
持續連接存在的問題:對於非持續連接,瀏覽器可以通過連接是否關閉來界定請求或響應實體的邊界;而對於持續連接,這種方法顯然不奏效。有時,盡管我已經發送完所有數據,但瀏覽器並不知道這一點,它無法得知這個打開的連接上是否還會有新數據進來,只能傻傻地等了。
用Content-length解決:計算實體長度,並通過頭部告訴對方。瀏覽器可以通過 Content-Length 的長度信息,判斷出響應實體已結束
Content-length引入的新問題:由於 Content-Length 字段必須真實反映實體長度,但是對於動態生成的內容來說,在內容創建完之前,長度是不可知的。這時候要想准確獲取長度,只能開一個足夠大的buffer,等內容全部生成好再計算。但這樣做一方面需要更大的內存開銷,另一方面也會讓客戶端等更久。
我們需要一個新的機制:不依賴頭部的長度信息,也能知道實體的邊界——分塊編碼(Transfer-Encoding: chunked)

分塊編碼(Transfer-Encoding: chunked)

Transfer-Encoding,是一個HTTP頭部字段(響應頭域),字面意思是「傳輸編碼」,最新的HTTP規范里,只定義了一種編碼傳輸:分塊編碼(chunked)。
分塊傳輸編碼(Chunked transfer encoding)是超文本傳輸協議(HTTP)中的一種數據傳輸機制,允許HTTP由網頁服務器發送給客戶端的數據可以分成多個部分。分塊傳輸編碼只在HTTP協議1.1版本(HTTP/1.1)中提供。數據分解成一系列數據塊,並以一個或多個塊發送,這樣服務器可以發送數據而不需要預先知道發送內容的總大小。

分塊編碼具體方法

在頭部加入Transfer-Encoding:chunked之后,就代表這個報文采用了分塊編碼。這時,報文中的實體需要改為用一系列分塊來傳輸。
每個分塊包含十六進制的長度值和數據,長度值獨占一行,長度不包括它結尾的CRLF(\r\n),也不包括分塊數據結尾的CRLF。
最后一個分塊長度值必須為0,對應的分塊數據沒有內容,表示實體結束。

消息體格式如下:

hex的分塊長度+<CR>回車+<LF>換行  
chunked data  
結束塊的分塊長度為0  

例如:

如要發送的內容(消息體)為:123456789  
那么消息體的格式為:  
9<CR><LF>  
123456789<CR><LF>  
0<CR><LF>  

Content-Encoding 和 Transfer-Encoding 二者經常會結合來用,其實就是針對 Transfer-Encoding 的分塊再進行 Content-Encoding壓縮。
分塊傳輸可以在長度標識處加上分號“;”作為注釋,幾乎所有可以識別Transfer-Encoding數據包的WAF,都沒有處理分塊數據包中長度標識處的注釋,導致在分塊數據包中加入注釋的話,WAF就識別不出這個數據包了。如:

9;kkkkk
1234567=1
4;ooo=222
2345
0
(兩個換行)

chunked-coding-converter

插件介紹

插件下載

github-chunked-coding-converter

分塊傳輸繞安全🐕

靶環境:xampp+sqlibs+安全🐕

1、sql注入查詢數據被waf攔截

2、利用chunked-coding-converter分塊傳輸繞過安全狗防護

分塊傳輸插件與sqlmap聯動

python2 sqlmap.py -u "http://192.168.34.1:8090/sqli-labs-php7-master/Less-11/" --random-agent --data="uname=%3Bk^&pas swd=^&submit=Submit" --proxy=http://127.0.0.1:8080 --fresh-queries -v 3

參考鏈接

技術討論 | 在HTTP協議層面繞過WAF
利用分塊傳輸吊打所有WAF
酒仙橋六號部隊-唯快不破的分塊傳輸繞WAF
測試 分塊傳輸輔助插件
cnblog-分塊編碼(Transfer-Encoding: chunked)

聲明

嚴禁讀者利用以上介紹知識點對網站進行非法操作 , 本文僅用於技術交流和學習 , 如果您利用文章中介紹的知識對他人造成損失 , 后果由您自行承擔 , 如果您不能同意該約定 , 請您務必不要閱讀該文章 , 感謝您的配合 !


免責聲明!

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



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