1. 程式人生 > 實用技巧 >每日一洞 | 分塊傳輸學習

每日一洞 | 分塊傳輸學習

分塊傳輸學習

1. 前言

最近面試看文章之餘碰到了分塊傳輸的知識點,其實早在2019年就知道了這個名詞但是一直沒有深入的看過,在這裡天上前面的坑。

2. 什麼是分塊傳輸?

首先分塊傳輸只支援http1.1,http1.1引入了分塊傳輸的編碼方式只要在程式碼頭部分加入Transfer-Encoding: chunked,就代表這個報文采用了分塊編碼。此時不用指定Content-Length接收方也可以知道什麼時候傳輸結束了,只需要約定一個訊號即可,比如,接收方只要接收到一個長度為0內容為0的分塊,則代表傳輸完畢。

那麼怎麼樣將一個普通的報文改編成分塊傳輸形式的呢?

報文中的實體需要改為用一系列分塊來傳輸。每個分塊包含十六進位制的長度值和資料,長度值獨佔一行,長度不包括它結尾的 CRLF(rn),也不包括分塊資料結尾的 CRLF。最後一個分塊長度值必須為 0,對應的分塊資料沒有內容(兩個空行),表示實體結束。

下面是一個post的資料

POST /api.php HTTP/1.1

Host:127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

Accept: */*

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-

US;q=0.3,en;q=0.2

Connection: close

Referer: 127.0.0.1

Cookie: phpsessionid

Content-Type: application/x-www-form-urlencoded

Content-Length: 25

id=123456```


比如一個post的資料包其內容為id = 123456;一般get方式是不會有Content-Length的因為url傳輸時限制了它的長度,但是post沒有,所以我們就需要有這個欄位來讓後端判斷資料的長度,如果沒有欄位這個地方就接受不到。

這裡我們就可以使用分塊傳輸的方式,改為分塊傳輸後的內容如下。

POST /api.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

Accept: /

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Connection: close

Referer: 127.0.0.1

Cookie: phpsessionid

Content-Type: application/x-www-form-urlencoded

Content-Length: 39

Transfer-Encoding: chunked

3

id=

1

1

1

2

2

34

2

56

0


最後有兩行空格(代表著結束),這就是分塊傳輸的格式3代表下面將會有3個字元(id=),但是後來一些waf對其的檢測格式更加的嚴格了所以我們採用了下面的方式其中';'代表著註釋,格式如下
'''
POST /api.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0

Accept: */*

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Connection: close

Referer: 127.0.0.1

Cookie: phpsessionid

Content-Type: application/x-www-form-urlencoded

Content-Length: 74

Transfer-Encoding: chunked

3;Twz1NRI1ihKTtxwqWuWTDEV4

id=

3;Hmd8LkqmPRVlz

123

3;2tEkv

456

0



'''

##3. 這就是分塊傳輸在滲透測試的利用方法

看了網上的很多方法主要時在注入的時候對於分塊傳輸的利用

總結有下面的方式:

1. 直接對sqlmap進行改動多了一個--chunk的引數然後對其進行注入當然這個方法相當於給你一個新的sqlmap。(來自於jaky表哥:https://pan.baidu.com/s/1xzkjewrOZp-gzuAvdsFEfw  密碼:z0lq)
2. burp的外掛去對內容進行一個加密,三表哥的外掛地址如下
>https://github.com/c0ny1/chunked-coding-converter

值得一提的是作者給的還是需要去編譯給安裝好mvn然後在目錄中執行mvn package,當前目錄會生成target檔案裡面包含了jar檔案,匯入burp就好。