HTTP走私漏洞原理與利用

原理

原理有兩篇文章寫(xiě)的十分詳細(xì),此處不在過(guò)多陳述。
HTTP request smuggling
一篇文章帶你讀懂 HTTP Smuggling 攻擊

CL-TE

實(shí)驗(yàn)室:https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te
登陸訪問(wèn)即可,看到實(shí)驗(yàn)室說(shuō)明,只需要后端收到GPOST的請(qǐng)求方法即可。

通過(guò)要求可以得知這是一個(gè)前端CL,后端TE的方式。先關(guān)閉burp的自動(dòng)更新content-length的設(shè)置,然后修改為6字節(jié),先發(fā)送一個(gè)請(qǐng)求,這個(gè)請(qǐng)求先不需要管。


image.png

再發(fā)送一個(gè)POST請(qǐng)求,就會(huì)顯示這次實(shí)驗(yàn)的需求,GPOST方法。


image.png
前端發(fā)送數(shù)據(jù)的時(shí)候,實(shí)驗(yàn)content-length來(lái)設(shè)置請(qǐng)求的長(zhǎng)度,后端使用transfer-encoding來(lái)處理消息。在cl和te的模式中。默認(rèn)是優(yōu)先使用te。
前端認(rèn)為
POST / HTTP/1.1
Content-Length: 6
Transfer-Encodin: chunked
xxx
xxx
0
G
以上為一個(gè)請(qǐng)求,參數(shù)長(zhǎng)度受content-length控制。
而后端接收te的模式,默認(rèn)這個(gè)是一個(gè)分塊請(qǐng)求
POST / HTTP/1.1
Content-Length: 6
Transfer-Encodin: chunked
xxx
xxx
0
-------------------------到此,后端認(rèn)為是一個(gè)請(qǐng)求,而G作為下一個(gè)請(qǐng)求而等待
G
這時(shí)候再進(jìn)來(lái)的請(qǐng)求,就會(huì)作為繼續(xù)未完成的請(qǐng)求而連接
GPOST / HTTP/1.1

TE-CL

實(shí)驗(yàn)室:https://portswigger.net/web-security/request-smuggling/lab-basic-te-cl
訪問(wèn)實(shí)驗(yàn)室,查看需求,由于說(shuō)明中已經(jīng)告訴我們是一個(gè)te-cl的方式。

image.png

構(gòu)造transfer-encoding塊,其中12代表0之前的字符串長(zhǎng)度包括換行符,長(zhǎng)度為16,十六進(jìn)制就是12。最后面的0需要跟兩個(gè)換行符,缺少的話會(huì)提示Invalid request??赡軜?gòu)造成功后,發(fā)送幾次仍然顯示Missing parameter,多試幾次即可。


image.png
前端服務(wù)器使用TE塊來(lái)區(qū)分。參數(shù)中
12
GPOST / HTTP/1.1
0
都被認(rèn)為是一個(gè)合法的塊消息。而后端服務(wù)器處理中只使用CL來(lái)劃分消息。導(dǎo)致在請(qǐng)求中的content-length: 4讓后端服務(wù)器認(rèn)為:
12
--------------------消息到此為一個(gè)消息
GPOST / HTTP/1.1
0
--------------------第二個(gè)請(qǐng)求消息
從而達(dá)到請(qǐng)求走私的目的

TE.TE

此種方式是前后端服務(wù)器都支持并且默認(rèn)使用te塊,使用某種方式導(dǎo)致一端不識(shí)別te塊來(lái)達(dá)到,cl-te或者te-cl的方式。
實(shí)驗(yàn)室:https://portswigger.net/web-security/request-smuggling/lab-ofuscating-te-header
同樣是用后端服務(wù)器識(shí)別到GPOST請(qǐng)求方法。

image.png

構(gòu)造混淆的te頭的常用方式:

1. Transfer-Encoding: xchunked
2. Transfer-Encoding : chunked
3. Transfer-Encoding: chunked
   Transfer-Encoding: x
4. Transfer-Encoding:[tab]chunked
5. [space]Transfer-Encoding: chunked
6. X: X[\n]Transfer-Encoding: chunked
7. Transfer-Encoding
   : chunked

請(qǐng)求了多次后發(fā)現(xiàn),一直提示缺少參數(shù)。


image.png

構(gòu)造錯(cuò)誤的te塊,提示無(wú)效請(qǐng)求,說(shuō)明前端服務(wù)器很可能是te。


image.png

重新使用以上提到的方式來(lái)嘗試混淆te,嘗試了幾種方式,發(fā)現(xiàn)只有雙寫(xiě)的情況下,可以混淆后端對(duì)te的處理。


image.png

也就是說(shuō)前端服務(wù)器處理te塊消息使用了第一個(gè)te頭來(lái)當(dāng)作標(biāo)準(zhǔn)解析,而后端服務(wù)器中使用了第二個(gè)te頭來(lái)當(dāng)作標(biāo)準(zhǔn)解析。

請(qǐng)求走私利用

上面幾種情況說(shuō)明了請(qǐng)求走私的利用方式,現(xiàn)在同樣利用實(shí)驗(yàn)室來(lái)嘗試一下請(qǐng)求走私能獲取到什么。
實(shí)驗(yàn)室:https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-cl-te

CL-TE

利用CL-TE漏洞方式,來(lái)訪問(wèn)前端服務(wù)器不能訪問(wèn)的/admin頁(yè)面。同時(shí)刪除carlos用戶。


image.png

嘗試直接訪問(wèn)的時(shí)候提示頁(yè)面不能訪問(wèn),然后修改為cl-te的方式

image.png

多發(fā)送兩次會(huì)發(fā)現(xiàn)提示


image.png

添加localhost頭。多發(fā)送幾次就可以看到需要?jiǎng)h除的用戶。


構(gòu)造刪除的地址來(lái)發(fā)送,提示跳轉(zhuǎn)302


image.png

再次查看頁(yè)面發(fā)送用戶被刪除


image.png

TE-TE

第二個(gè)是利用TE-CL的方式來(lái)刪除用戶,同樣嘗試一下

實(shí)驗(yàn)室: https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-te-cl

流程基本一致,還是需要添加localhost頭


image.png

查看到admin頁(yè)面


image.png

執(zhí)行刪除用戶,查看已刪除。


image.png

請(qǐng)求走私重寫(xiě)請(qǐng)求

實(shí)驗(yàn)室:https://portswigger.net/web-security/request-smuggling/exploiting/lab-reveal-front-end-request-rewriting

利用請(qǐng)求走私來(lái)達(dá)到訪問(wèn)/admin頁(yè)面,但是需要添加請(qǐng)求頭,類似xff頭,但不是xff頭,然后再去刪除用戶。
實(shí)驗(yàn)室有個(gè)搜索功能,說(shuō)明這個(gè)功能可能幫助我們獲得需要的請(qǐng)求頭。先訪問(wèn)admin頁(yè)面


image.png

再嘗試走私請(qǐng)求來(lái)訪問(wèn)搜索,嘗試了多次,添加頭后終于看到了需要的請(qǐng)求頭。而content-length的大小關(guān)系泄露出來(lái)的多少有關(guān)。


image.png

查看到了熟悉的用戶頁(yè)面


image.png

不過(guò)刪除過(guò)程中發(fā)現(xiàn),如果還按照之前的方式來(lái)刪除用戶,會(huì)不能刪除,多次嘗試后發(fā)現(xiàn)提示不允許換行符。


image.png

重新嘗試發(fā)現(xiàn)使用GET方法來(lái)刪除即可


image.png

獲取其他用戶cookie

實(shí)驗(yàn)室:https://portswigger.net/web-security/request-smuggling/exploiting/lab-capture-other-users-requests

這個(gè)實(shí)驗(yàn)一開(kāi)始并沒(méi)有g(shù)et到點(diǎn),查看解后才發(fā)現(xiàn)原來(lái)忽略了長(zhǎng)度。

我們提交請(qǐng)求的時(shí)候,受害者也會(huì)提交請(qǐng)求,就是需要獲取并顯示受害者的請(qǐng)求來(lái)達(dá)到獲取cookie的目的。


image.png

提交請(qǐng)求后顯示跳轉(zhuǎn)地址


image.png

查看頁(yè)面的顯示,從而獲取用戶的請(qǐng)求cookie


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容