演習のURLは次のとおりです https://portswigger.net/web-security/ssrf/lab-ssrf-with-whitelist-filter
解決策は次のとおりです。http://localhost:80%[email protected]/admin/delete?username=carlos
少し簡略化(ポートを指定しない):http://localhost%[email protected]/admin/delete?username=carlos
次のことに集中できます。http://localhost%[email protected]
資格情報コンポーネント(@
の前のすべて)が、@
の後のすべてがURLフラグメントの一部であるかのように処理されるのはなぜですか? #
文字をダブルエンコードする前のURLは次のようになります。http://localhost#@stock.weliketoshop.net
@
をダブルエンコードした後でも、#
が必要なのはなぜですか?なぜhttp://localhost%2523stock.weliketoshop.net
(「@」ではない)が機能しないのですか? URLフラグメントステートメントは、クレデンシャルステートメントよりも優先されますか?なぜ@
が#
を支持して無視されるのですか?
RFC 3986によると:
Userinfoサブコンポーネントは、ユーザー名と、オプションで、リソースにアクセスするための認証を取得する方法に関するスキーム固有の情報で構成されます。ユーザー情報が存在する場合は、ホストから区切るための商用アットマーク( "@")が後に続きます。