# HTTP request smuggling Lab11
本題是 HTTP/2 Request Splitting via CRLF injection,重點是利用 HTTP/2 → HTTP/1.1 的轉換過程,透過 CRLF 注入在前端 proxy 分離出一個完整的請求,進而劫持 admin 的回應(response queue poisoning),取得 session cookie 並刪掉 carlos。
一樣先進入網站並攔截請求。

發現這題的 seach 會有歷史紀錄。

而且歷史紀錄是跟 Cookie session 綁一起的。

所以我們先去擷取搜尋時的請求。

接著在 HTTP/2 request 裡插入一個 header,目的是為了騙過前端伺服器,觸發 HTTP Request Smuggling。
- Name: `foo`
- Value: `bar\r\nTransfer-Encoding: chunked`
- 這裡的 `\r\n` 會被 Burp 自動轉成真正的 CRLF。

設定完再將請求做更改。
---


如果出現連續兩個 200 也就代表 lab 完成了。

:::info
### 為什麼加 Content-Length: 0 可以測試是否有漏洞?
前後端對 body 的「解讀方式」不同:
| 前端 (HTTP/2) | 後端 (HTTP/1.1) |
| -------- | -------- |
| 不管 body 寫什麼,只看 Content-Length | 當然會把 body 當新請求看 |
| Content-Length: 0 表示:我沒要傳資料 | 看到一整個 GET 開頭的新請求:中計了! |
HTTP/2 規定得很清楚:
如果 `Content-Length: 0`,那這請求就沒 body,剩下的內容它根本不看,直接傳給後端。
後端把第一段 POST 處理掉,然後看到第二段開始是完整的新請求,就直接炸開。
### /resources 與 /resources/ 差異?
`/resources` 沒有尾巴就被自動加上 `/` 變路徑,而使用者進入 `/resources/` 直接讀 `/resources/` 裡的 body 內容觸發我們的惡意 payload。
- 受害者原本想送的請求會被「拼接」到這段 GET 請求後面,導致後端把受害者的請求也包含進來,或被污染成我們的請求目標。
- 由於指定了 Host: exploit-server.net,後端就會把這個請求當作訪問這個主機,讓受害者的瀏覽器去拿我們控制的惡意伺服器的資源。
- 最後出現兩個 200 可以也確定是我們先被伺服器正常處理 200 後,再換目標使用者中招而出現第二個 200。
:::
---