mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/ssrf-server-side-request-forgery/url-for
This commit is contained in:
parent
d174bebf87
commit
906a952860
@ -144,9 +144,9 @@ http://1.1.1.1 &@2.2.2.2# @3.3.3.3/
|
||||
#Parameter pollution
|
||||
next={domain}&next=attacker.com
|
||||
```
|
||||
### Paths and Extensions Bypass
|
||||
### Pfade und Erweiterungen umgehen
|
||||
|
||||
Wenn Sie benötigen, dass die URL mit einem Pfad oder einer Erweiterung endet oder einen Pfad enthalten muss, können Sie einen der folgenden Bypässe ausprobieren:
|
||||
Wenn es erforderlich ist, dass die URL mit einem Pfad oder einer Erweiterung endet oder einen Pfad enthalten muss, können Sie einen der folgenden Umgehungen versuchen:
|
||||
```
|
||||
https://metadata/vulerable/path#/expected/path
|
||||
https://metadata/vulerable/path#.extension
|
||||
@ -154,11 +154,11 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
||||
```
|
||||
### Fuzzing
|
||||
|
||||
Das Tool [**recollapse**](https://github.com/0xacb/recollapse) kann Variationen aus einem gegebenen Input generieren, um den verwendeten Regex zu umgehen. Siehe auch [**diesen Beitrag**](https://0xacb.com/2022/11/21/recollapse/) für weitere Informationen.
|
||||
Das Tool [**recollapse**](https://github.com/0xacb/recollapse) kann Variationen aus einem gegebenen Input generieren, um die verwendete Regex zu umgehen. Siehe auch [**diesen Beitrag**](https://0xacb.com/2022/11/21/recollapse/) für weitere Informationen.
|
||||
|
||||
### Automatische benutzerdefinierte Wortlisten
|
||||
|
||||
Schau dir die [**URL-Validierungs-Bypass-Checkliste**-Webanwendung](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) von Portswigger an, wo du den erlaubten Host und den des Angreifers eingeben kannst, und sie wird eine Liste von URLs für dich generieren. Sie berücksichtigt auch, ob du die URL in einem Parameter, in einem Host-Header oder in einem CORS-Header verwenden kannst.
|
||||
Schau dir die [**URL-Validierungs-Bypass-Checkliste** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) von portswigger an, wo du den erlaubten Host und den des Angreifers eingeben kannst, und es wird eine Liste von URLs generiert, die du ausprobieren kannst. Es berücksichtigt auch, ob du die URL in einem Parameter, in einem Host-Header oder in einem CORS-Header verwenden kannst.
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
@ -166,7 +166,7 @@ https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
|
||||
|
||||
### Bypass über Umleitung
|
||||
|
||||
Es könnte möglich sein, dass der Server **die ursprüngliche Anfrage** eines SSRF **filtert, aber nicht** eine mögliche **Umleitungsantwort** auf diese Anfrage.\
|
||||
Es könnte möglich sein, dass der Server **die ursprüngliche Anfrage** eines SSRF **filtert**, aber nicht eine mögliche **Umleitungs**antwort auf diese Anfrage.\
|
||||
Zum Beispiel könnte ein Server, der anfällig für SSRF über: `url=https://www.google.com/` ist, **den url-Parameter filtern**. Aber wenn du einen [Python-Server verwendest, um mit einem 302 zu antworten](https://pastebin.com/raw/ywAUhFrv) an den Ort, an den du umleiten möchtest, könntest du in der Lage sein, **gefilterte IP-Adressen** wie 127.0.0.1 oder sogar gefilterte **Protokolle** wie gopher zu **zugreifen**.\
|
||||
[Sieh dir diesen Bericht an.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||
```python
|
||||
@ -193,13 +193,13 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
||||
|
||||
### Blackslash-Trick
|
||||
|
||||
Der _backslash-trick_ nutzt einen Unterschied zwischen dem [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) und [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) aus. Während RFC3986 einen allgemeinen Rahmen für URIs bietet, ist WHATWG spezifisch für Web-URLs und wird von modernen Browsern übernommen. Der entscheidende Unterschied liegt in der Anerkennung des Backslashes (`\`) im WHATWG-Standard als gleichwertig zum Schrägstrich (`/`), was die Art und Weise beeinflusst, wie URLs geparst werden, insbesondere den Übergang vom Hostnamen zum Pfad in einer URL markiert.
|
||||
Der _backslash-trick_ nutzt einen Unterschied zwischen dem [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) und [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B) aus. Während RFC3986 ein allgemeines Rahmenwerk für URIs ist, ist WHATWG spezifisch für Web-URLs und wird von modernen Browsern übernommen. Der entscheidende Unterschied liegt in der Anerkennung des Backslashes (`\`) im WHATWG-Standard als gleichwertig zum Schrägstrich (`/`), was die Art und Weise beeinflusst, wie URLs geparst werden, insbesondere den Übergang vom Hostnamen zum Pfad in einer URL markiert.
|
||||
|
||||

|
||||
|
||||
### Linke eckige Klammer
|
||||
|
||||
Das Zeichen „linke eckige Klammer“ `[` im Benutzerinfo-Segment kann dazu führen, dass Spring’s UriComponentsBuilder einen Hostnamenwert zurückgibt, der sich von dem der Browser unterscheidet: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
Das Zeichen “linke eckige Klammer” `[` im Benutzerinfo-Segment kann dazu führen, dass Spring’s UriComponentsBuilder einen Hostnamenwert zurückgibt, der sich von dem der Browser unterscheidet: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
|
||||
|
||||
### Andere Verwirrungen
|
||||
|
||||
@ -207,10 +207,42 @@ Das Zeichen „linke eckige Klammer“ `[` im Benutzerinfo-Segment kann dazu fü
|
||||
|
||||
Bild von [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-Zonenbezeichner (%25) Trick
|
||||
|
||||
Moderne URL-Parser, die RFC 6874 unterstützen, erlauben *link-lokale* IPv6-Adressen, einen **Zonenbezeichner** nach einem Prozentzeichen einzuschließen. Einige Sicherheitsfilter sind sich dieser Syntax nicht bewusst und entfernen nur eckig geklammerte IPv6-Literale, wodurch die folgende Payload eine interne Schnittstelle erreichen kann:
|
||||
```text
|
||||
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
|
||||
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
|
||||
```
|
||||
Wenn die Zielanwendung überprüft, dass der Host *nicht* `fe80::1` ist, aber beim `%` das Parsen stoppt, kann sie die Anfrage fälschlicherweise als extern behandeln. Normalisieren Sie die Adresse **vor** jeder Sicherheitsentscheidung oder entfernen Sie die optionale Zonen-ID vollständig.
|
||||
|
||||
### Aktuelle Bibliotheks-Parsing-CVEs (2022–2025)
|
||||
|
||||
Eine Reihe von gängigen Frameworks hatte Probleme mit Hostnamen-Mismatches, die für SSRF ausgenutzt werden können, sobald die URL-Validierung mit den oben aufgeführten Tricks umgangen wurde:
|
||||
|
||||
| Jahr | CVE | Komponente | Fehlerzusammenfassung | Minimaler PoC |
|
||||
|------|-----|-----------|-----------------------|----------------|
|
||||
| 2024 | CVE-2024-22243 / ‑22262 | Spring `UriComponentsBuilder` | `[` ist im *userinfo*-Abschnitt nicht erlaubt, sodass `https://example.com\[@internal` von Spring als Host `example.com` und von Browsern als `internal` geparst wird, was bei der Verwendung von Host-Whitelist-Listen zu Open-Redirect & SSRF führt. Upgrade auf Spring 5.3.34 / 6.0.19 / 6.1.6+. |
|
||||
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Verwirrung durch Backslash erlaubte es, `http://example.com\\@169.254.169.254/` zu verwenden, um Hostfilter zu umgehen, die bei `@` aufteilen. |
|
||||
| 2022 | CVE-2022-3602 | OpenSSL | Die Überprüfung des Hostnamens wurde übersprungen, wenn der Name mit einem `.` (punktloser Domain-Verwirrung) endete. |
|
||||
|
||||
Wenn Sie von Drittanbieter-URL-Parsern abhängen, **vergleichen Sie den kanonisierten Host, der von der Bibliothek, der Sie vertrauen, zurückgegeben wird, mit dem rohen String, der vom Benutzer bereitgestellt wird**, um diese Klassen von Problemen zu erkennen.
|
||||
|
||||
### Payload-Generierungshelfer (2024+)
|
||||
|
||||
Das manuelle Erstellen großer benutzerdefinierter Wortlisten ist mühsam. Das Open-Source-Tool **SSRF-PayloadMaker** (Python 3) kann jetzt automatisch *80 k+* Host-Manipulationskombinationen generieren, einschließlich gemischter Kodierungen, erzwungenem HTTP-Downgrade und Backslash-Varianten:
|
||||
```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
|
||||
```
|
||||
Die resultierende Liste kann direkt in Burp Intruder oder `ffuf` eingegeben werden.
|
||||
|
||||
## Referenzen
|
||||
|
||||
- [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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user