傳送門:
http走私漏洞學(xué)習(xí)(1)--http走私簡(jiǎn)介
http走私漏洞學(xué)習(xí)(2)--http走私常見(jiàn)方法
http走私漏洞學(xué)習(xí)(3)--http走私漏洞利用
0x00 什么是http走私
http走私(HTTP Request Smuggling)最早是在2005年由Watchfire記錄的滤馍,該漏洞利用了前端服務(wù)器(cdn)和后端服務(wù)器對(duì)數(shù)據(jù)包邊界定義不一致的情況,將前一個(gè)數(shù)據(jù)包的內(nèi)容插入至下一個(gè)數(shù)據(jù)包中析孽。通常情況下偶垮,利用該漏洞可以竊取到用戶的請(qǐng)求數(shù)據(jù)窒所,如cookie等。
0x01 基礎(chǔ)知識(shí)
起初在HTTP1.0中的協(xié)議設(shè)計(jì)中,客戶端每一次都要進(jìn)行一次tcp連接兑燥,一旦響應(yīng)返回就會(huì)關(guān)閉連接百拓,這種連接稱為短鏈接琴锭。
在HTTP1.1的時(shí)代,支持了Keep-Alive模式衙传,也就是請(qǐng)求頭中的Connection:Keep-Alive决帖,在HTTP1.1中默認(rèn)開(kāi)啟。它告訴服務(wù)器蓖捶,接收回應(yīng)此HTTP請(qǐng)求后地回,不要關(guān)閉TCP鏈接,對(duì)后面的HTTP請(qǐng)求重用該TCP連接,這樣就減少了服務(wù)器的開(kāi)銷刻像。但它只能請(qǐng)求一次響應(yīng)一次畅买。
在有了Keep-Alive后,后續(xù)就有了Pipeline(管線化)绎速,它可以批量提交多個(gè)HTTP請(qǐng)求皮获,不必請(qǐng)求一次響應(yīng)一次。Content-length(實(shí)體長(zhǎng)度)纹冤,指出報(bào)文實(shí)體主體的字節(jié)大小洒宝,如果 Content-Length 比實(shí)際長(zhǎng)度短,會(huì)造成內(nèi)容被截?cái)嗝染蝗绻葘?shí)體內(nèi)容長(zhǎng)雁歌,會(huì)造成無(wú)響應(yīng)至等待超時(shí)。
Transfer-Encoding: chunked(分塊編碼)知残,在請(qǐng)求頭部添加該行靠瞎,意味著請(qǐng)求報(bào)文使用分塊編碼,在每一個(gè)塊中首先使用十六進(jìn)制表示當(dāng)前塊的長(zhǎng)度求妹,然后\r\n(回車乏盐,占兩字節(jié)),接著是塊的內(nèi)容制恍,再回車此塊結(jié)束父能,最后用0表示傳輸完畢,最后空兩行净神。
0x02 產(chǎn)生原理
一個(gè)正常的請(qǐng)求中何吝,前端發(fā)送的數(shù)據(jù),后端可以完全接收鹃唯。
后端能否正確的接收完整請(qǐng)求的數(shù)據(jù)爱榕,意味著前后端結(jié)束位必須達(dá)到一致。當(dāng)攻擊者發(fā)送一個(gè)‘模糊’的請(qǐng)求坡慌,后端認(rèn)為其中一部分是正常請(qǐng)求黔酥,而余下的數(shù)據(jù)依然留在服務(wù)器中,當(dāng)下一個(gè)請(qǐng)求過(guò)來(lái)時(shí)洪橘,余下的數(shù)據(jù)和當(dāng)前的請(qǐng)求拼合在一起變成了一個(gè)請(qǐng)求絮爷,這些余下的數(shù)據(jù)便成為了走私數(shù)據(jù)。
0x03 簡(jiǎn)單演示
利用https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te中的靶場(chǎng)進(jìn)行演示
進(jìn)入靶場(chǎng)抓包,修改為POST請(qǐng)求方式指巡,關(guān)閉burp suite自動(dòng)更新Content-Length功能
該靶場(chǎng)中利用的是CL-TE走私梨树,前端遵循Content-Length,后端遵循Transfer-Encoding岖寞,CL被忽略抡四,按TE處理。
正常提交數(shù)據(jù)包正常返回:
修改數(shù)據(jù)包淑履,添加 Transfer-Encoding: chunked,修改數(shù)據(jù)包Content-Length的值Content-Length為10的原因?yàn)榛剀囌紦?jù)兩字節(jié)藻雪,回車+0+回車+HELLO共10字節(jié)秘噪,接著提交,返回正常POST / HTTP/1.1 Host: ac281f8a1ece4f1980d61fb7000a00d0.web-security-academy.net Connection: close Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) >AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 >Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Sec-Fetch-Site: cross-site Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: session=E4Rwvo7mdvUM2W9694zcELGHntk1EJGk Content-Type: application/x-www-form-urlencoded Content-Length: 10 Transfer-Encoding: chunked 0 HELLO
再次提交勉耀,提示:"Unrecognized method HELLOPOST"
發(fā)現(xiàn)HELLO拼接到了另一個(gè)數(shù)據(jù)包指煎,數(shù)據(jù)包變成了HELLOPOST / HTTP/1.1 ....
這便造成了一個(gè)簡(jiǎn)單的http走私
0x04 參考文章
1、漏洞銀行丨HTTP Request Smuggling賬戶劫持與WAF繞過(guò)詳解-檸楓丨咖面110期
2便斥、freebuf-淺析HTTP走私攻擊
3至壤、freebuf-HTTP走私漏洞分析