# HTTP request smuggling Lab4 本題是 TE.CL(Transfer-Encoding + Content-Length)漏洞,目標是把 carlos 幹掉。 重點: - 前端支持 chunked,後端不支持 chunked。 所以一樣先進入網站並攔截封包。 ![image](https://hackmd.io/_uploads/BykEuGQDee.png) ![image](https://hackmd.io/_uploads/SkL2N7Qvll.png) 這裡直接去 admin 都跟上題一樣需要 cookie。 ![image](https://hackmd.io/_uploads/H1AyLXXvle.png) 所以我們在請求中加上 localhost 。 ![image](https://hackmd.io/_uploads/rkHmU7Qweg.png) 成功了,接著是砍掉目標使用者,從 admin 的頁面可以看到砍掉使用者的連結是啥,跟上題一樣。 ``` /admin/delete?username=carlos ``` 所以我們丟回請求中在試試。 ![image](https://hackmd.io/_uploads/rypSP7Qvle.png) ![image](https://hackmd.io/_uploads/rkDtwQ7Dxg.png) ![image](https://hackmd.io/_uploads/rkC5vQQwxe.png) :::info ### 跟 CL.TE 的差異在哪? 在於 `Content-Length` 的長度: - CL.TE 是「故意寫錯」的短長度,少於實際 chunked body 長度,裡包含完整的 smuggled request,因為只看 Content-Length 讀指定長度,後端用 Transfer-Encoding 解析 chunked body,讀到真正的結尾,後端會把 Content-Length 之後剩下的部分當成新請求。 - TE.CL 是「精確」的短長度,包括整個 chunked body,不會解析 chunked,後端因為沒 chunked 支援,只看到一部分資料,剩下當作下一個獨立請求。 | 漏洞類型 | Content-Length 設定 | Transfer-Encoding 設定 |smuggled request 在哪 | | -------- | -------- | -------- | -------- | | CL.TE | 故意短(少於實際 chunked body) | 有,chunked | chunked body 裡面 | | TE.CL | 精準(包含整個 chunked body) | 有,chunked | Content-Length 結尾後 | ### 換比喻: - CL.TE 是前端「只掐頭不截尾」,後端「拆包拆到底」。 - TE.CL 是前端「拆完整包」,後端「只看包裝盒標籤」。 ::: ---