這個(gè)參考文章是:https://portswigger.net/web-security/request-smuggling
作者通過這一個(gè)漏洞,在hackone平臺(tái)上挖了很多應(yīng)用的漏洞,獲得了幾萬美元的獎(jiǎng)勵(lì),然后還在blackhat上演講過,可以搜下他的ppt(us-19-Kettle-HTTP-Desync-Attacks-Smashing-Into-The-Cell-Next-Door)
),攻擊思路比較新奇,在測試中我用了,發(fā)現(xiàn)有些應(yīng)用也存在此漏洞;這里我只簡單介紹下,具體去看ppt;
漏洞形成的原因:
前端服務(wù)器(cdn)和后端服務(wù)器接收數(shù)據(jù)不同步,引起對(duì)客戶端傳入的數(shù)據(jù)理解不一致,從而導(dǎo)致漏洞;為什么會(huì)不一致呢?
主要是處理Content-Length和Transfer-Encoding不一致,原則上同時(shí)使用兩者時(shí),Content-Length是無效的,當(dāng)單個(gè)服務(wù)器時(shí),沒有任何問題,但當(dāng)多個(gè)服務(wù)器時(shí),理解的數(shù)據(jù)不一致時(shí),就會(huì)出現(xiàn)有些服務(wù)器認(rèn)為Content-Length的長度有效,有些以Transfer-Encoding有效,這樣超出的長度就會(huì)拼接到下一次請(qǐng)求,從而導(dǎo)致漏洞。
下面用實(shí)例說明下
1. 經(jīng)典攻擊方法重復(fù)Content-Length
通過Content-Length屬性控制body的長度,前端看到的長度為6,那么POST請(qǐng)求沒問題,但后端看到是長度為5,那么G這個(gè)字符會(huì)拼接到下一個(gè)HTTP請(qǐng)求上去,導(dǎo)致返回Unknow method GPOST

2. Transfer-Encoding: chunked攻擊方法

3.其它攻擊方式

修復(fù)方案:
1、前端服務(wù)器對(duì)前段輸入規(guī)范化
2、前端服務(wù)器使用HTTP2.0
3、后端服務(wù)器丟棄非正常請(qǐng)求