Translated ['src/pentesting-web/ssrf-server-side-request-forgery/url-for

This commit is contained in:
Translator 2025-07-22 08:44:36 +00:00
parent 106044ab6a
commit 4db1b62730

View File

@ -146,7 +146,7 @@ next={domain}&next=attacker.com
```
### パスと拡張子のバイパス
URLがパスまたは拡張子で終わる必要がある場合、またはパスを含む必要がある場合は、次のいずれかのバイパスを試すことができます:
URLがパスまたは拡張子で終わる必要がある場合、またはパスを含む必要がある場合は、次のいずれかのバイパスを試すことができます
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -193,7 +193,7 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### バックスラッシュ・トリック
_バックスラッシュ・トリック_ は、[WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) と [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) の違いを利用します。RFC3986はURIの一般的なフレームワークですが、WHATWGはウェブURLに特化しており、現代のブラウザに採用されています。重要な違いは、WHATWG標準がバックスラッシュ`\`)をフォワードスラッシュ(`/`と同等と認識している点で、これがURLの解析方法に影響を与え、特にホスト名からパスへの遷移を示します。
_the backslash-trick_ は、[WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) と [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) の違いを利用します。RFC3986はURIの一般的なフレームワークですが、WHATWGはウェブURLに特化しており、現代のブラウザに採用されています。重要な違いは、WHATWG標準がバックスラッシュ`\`)をフォワードスラッシュ(`/`と同等と認識している点で、これがURLの解析方法に影響を与え、特にホスト名からパスへの遷移を示します。
![https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg)
@ -205,12 +205,44 @@ _バックスラッシュ・トリック_ は、[WHATWG URL Standard](https://ur
![https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](<../../images/image (600).png>)
画像出典: [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
画像は [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/) から
### IPv6ゾーン識別子%25トリック
RFC 6874をサポートする現代のURLパーサーは、パーセント記号の後に**ゾーン識別子**を含む*リンクローカル* IPv6アドレスを許可します。一部のセキュリティフィルターはこの構文を認識しておらず、角括弧で囲まれたIPv6リテラルのみを削除し、次のペイロードが内部インターフェースに到達することを許可します:
```text
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
```
ターゲットアプリケーションがホストが *not* `fe80::1` であることを検証するが、`%` で解析を停止する場合、リクエストを外部として誤って扱う可能性があります。常にアドレスを **before** セキュリティ決定を行う前に正規化するか、オプションのゾーンIDを完全に削除してください。
### 最近のライブラリ解析 CVE (20222025)
いくつかの主流フレームワークは、上記のトリックでURL検証がバイパスされた後にSSRFに悪用されるホスト名不一致の問題に悩まされています。
| 年 | CVE | コンポーネント | バグの概要 | 最小 PoC |
|------|---------------------------|-----------------------------------|---------------------------------------------------------------------------|----------|
| 2024 | CVE-2024-22243 / 22262 | Spring `UriComponentsBuilder` | `[`*userinfo* セクションで許可されていないため、`https://example.com\[@internal` はSpringによってホスト `example.com` として解析されますが、ブラウザでは `internal` として解析され、ホストの許可リストが使用されるとオープンリダイレクトとSSRFを可能にします。Spring 5.3.34 / 6.0.19 / 6.1.6+ にアップグレードしてください。 |
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | バックスラッシュの混乱により`http://example.com\\@169.254.169.254/` `@` で分割されるホストフィルターをバイパスできました |
| 2022 | CVE-2022-3602 | OpenSSL | 名前が `.` でサフィックスされるとホスト名の検証がスキップされます(ドットレスドメインの混乱)。 |
サードパーティのURLパーサーに依存する場合、**信頼するライブラリが返す正規化されたホストとユーザーが提供した生の文字列を比較して、これらの問題のクラスを検出してください。**
### ペイロード生成ヘルパー (2024+)
手作業で大規模なカスタム単語リストを作成するのは面倒です。オープンソースツール **SSRF-PayloadMaker** (Python 3) は、混合エンコーディング、強制HTTPダウングレード、バックスラッシュバリアントを含む *80 k+* のホストマングリングの組み合わせを自動的に生成できるようになりました。
```bash
# Generate every known bypass that transforms the allowed host example.com to attacker.com
python3 ssrf_maker.py --allowed example.com --attacker attacker.com -A -o payloads.txt
```
結果のリストは、Burp Intruder または `ffuf` に直接入力できます。
## 参考文献
- [https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25](https://as745591.medium.com/albussec-penetration-list-08-server-side-request-forgery-ssrf-sample-90267f095d25)
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Request%20Forgery/README.md)
- [https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet](https://portswigger.net/research/new-crazy-payloads-in-the-url-validation-bypass-cheat-sheet)
- [https://nvd.nist.gov/vuln/detail/CVE-2024-22243](https://nvd.nist.gov/vuln/detail/CVE-2024-22243)
- [https://github.com/hsynuzm/SSRF-PayloadMaker](https://github.com/hsynuzm/SSRF-PayloadMaker)
{{#include ../../banners/hacktricks-training.md}}