# HTTP request smuggling Lab6 本題有前端+後端伺服器,前端不支援 chunked encoding,要 Smuggle 一個請求進後端,使得後面的使用者請求內容「被儲存」起來(例如出現在留言區),然後再用留言介面撈出「其他用戶的 Cookie」,進而登入他們帳號。 重點: - Smuggle 一個留言請求,誘使後端把下一個使用者的 request 當作留言一起存起來。 - 回到原本的文章頁面,看留言,有沒有出現其他使用者的 request。 - 若有 Cookie header,撿起來用來登入他帳號。 所以一樣先進入網站。 ![image](https://hackmd.io/_uploads/SktulVUvee.png) 接著隨便到一篇文章底下留言並攔截請求。 ![image](https://hackmd.io/_uploads/BJb3eEUwxx.png) ![image](https://hackmd.io/_uploads/B1WTgN8Pxg.png) 所以一樣寫 chunk 內容,不過在這次的 Content-Length 設定中,我們刻意將值範圍變大。 ![image](https://hackmd.io/_uploads/BkOCWVLwgl.png) Cookie 跟 csrf 的值一樣要保留,預防系統要我們登入。 :::info ### 為什麼 Content-Length 多設? 這是要告訴後端:我要送出 600 bytes 的 request body。 但實際上你的 body 沒那麼長,只有大概 140~150 bytes。 這樣的設計是刻意的,目的是讓後端「認為」接下來用戶的請求還是你的 request body 的一部分。 導致後端覺得:「這包留言還沒送完,下一個使用者的請求應該就是他的延續,我照單全收。」 然後他就把別人整包 Cookie、路徑、資料 全部當留言存下來。 ::: 最後送出: ![image](https://hackmd.io/_uploads/Hyqt8EUwee.png) 這裡會發現 600 還不夠。 ![image](https://hackmd.io/_uploads/Bk__D4Iweg.png) 因此我在請求中嘗試直接衝 800~900,然後他要嘛不夠,不然就是沒抓到:),所以大概 30-40 次後,在 940 試出來了(ಥ_ಥ)。 ![image](https://hackmd.io/_uploads/SyxzyHIwel.png) ![image](https://hackmd.io/_uploads/BJnOCN8Pgx.png) ``` clByhhLG9eOqGmRCVYOCTNebIHoLmApM ``` 最後拿去登入。 ![image](https://hackmd.io/_uploads/Sk-lgSIDgx.png) ![image](https://hackmd.io/_uploads/ryu-lSUvxx.png) ---