每日一洞 | 分塊傳輸學習
分塊傳輸學習
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就好。