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

This commit is contained in:
Translator 2025-07-22 08:45:37 +00:00
parent 3af7863927
commit 9c2f79edd3

View File

@ -146,7 +146,7 @@ next={domain}&next=attacker.com
```
### Bypass di Percorsi ed Estensioni
Se è richiesto che l'URL debba terminare con un percorso o un'estensione, o debba contenere un percorso, puoi provare uno dei seguenti bypass:
Se è richiesto che l'URL termini con un percorso o un'estensione, o debba contenere un percorso, puoi provare uno dei seguenti bypass:
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -154,7 +154,7 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
```
### Fuzzing
Lo strumento [**recollapse**](https://github.com/0xacb/recollapse) può generare variazioni da un input dato per cercare di bypassare il regex utilizzato. Controlla [**questo post**](https://0xacb.com/2022/11/21/recollapse/) anche per ulteriori informazioni.
Lo strumento [**recollapse**](https://github.com/0xacb/recollapse) può generare variazioni da un input dato per cercare di bypassare il regex utilizzato. Controlla [**questo post**](https://0xacb.com/2022/11/21/recollapse/) per ulteriori informazioni.
### Automatic Custom Wordlists
@ -193,13 +193,13 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Blackslash-trick
Il _backslash-trick_ sfrutta una differenza tra il [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) e [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Mentre RFC3986 è un framework generale per gli URI, WHATWG è specifico per gli URL web ed è adottato dai browser moderni. La distinzione chiave risiede nel riconoscimento del backslash (`\`) come equivalente alla barra obliqua (`/`) nello standard WHATWG, influenzando il modo in cui gli URL vengono analizzati, segnando specificamente la transizione dal nome host al percorso in un URL.
Il _backslash-trick_ sfrutta una differenza tra il [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) e [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Mentre RFC3986 è un framework generale per gli URI, WHATWG è specifico per gli URL web ed è adottato dai browser moderni. La distinzione chiave risiede nel riconoscimento del backslash (`\`) da parte dello standard WHATWG come equivalente alla barra obliqua (`/`), influenzando il modo in cui gli URL vengono analizzati, segnando specificamente la transizione dal nome host al percorso in un 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)
### Parentesi quadra sinistra
Il carattere “parentesi quadra sinistra” `[` nel segmento userinfo può causare a UriComponentsBuilder di Spring di restituire un valore di hostname che differisce da quello dei browser: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
Il carattere “parentesi quadra sinistra” `[` nel segmento userinfo può causare a UriComponentsBuilder di Spring di restituire un valore di hostname che differisce dai browser: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
### Altre Confusioni
@ -207,10 +207,42 @@ Il carattere “parentesi quadra sinistra” `[` nel segmento userinfo può caus
immagine da [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 Zone Identifier (%25) Trick
I moderni parser URL che supportano RFC 6874 consentono agli indirizzi IPv6 *link-local* di includere un **zone identifier** dopo un segno di percentuale. Alcuni filtri di sicurezza non sono a conoscenza di questa sintassi e rimuoveranno solo i letterali IPv6 racchiusi tra parentesi quadre, permettendo al payload seguente di raggiungere un'interfaccia interna:
```text
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
```
Se l'applicazione target convalida che l'host *non* è `fe80::1` ma smette di analizzare al `%`, potrebbe trattare erroneamente la richiesta come esterna. Normalizza sempre l'indirizzo **prima** di qualsiasi decisione di sicurezza o rimuovi completamente l'ID di zona opzionale.
### Recent Library Parsing CVEs (20222025)
Un certo numero di framework mainstream ha sofferto di problemi di corrispondenza del nome host che possono essere sfruttati per SSRF una volta che la convalida dell'URL è stata bypassata con i trucchi elencati sopra:
| Anno | CVE | Componente | Sintesi del bug | PoC minima |
|------|-----|-----------|--------------|-------------|
| 2024 | CVE-2024-22243 / 22262 | Spring `UriComponentsBuilder` | `[` non è consentito nella sezione *userinfo*, quindi `https://example.com\[@internal` è analizzato come host `example.com` da Spring ma come `internal` dai browser, abilitando open-redirect & SSRF quando vengono utilizzate le liste di autorizzazione degli host. Aggiorna a Spring 5.3.34 / 6.0.19 / 6.1.6+. |
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | La confusione del backslash ha permesso a `http://example.com\\@169.254.169.254/` di bypassare i filtri host che si dividono su `@`. |
| 2022 | CVE-2022-3602 | OpenSSL | La verifica del nome host è stata saltata quando il nome è suffisso con un `.` (confusione del dominio senza punto). |
Quando dipendi da parser URL di terze parti, **confronta l'host canonico restituito dalla libreria di cui ti fidi con la stringa grezza fornita dall'utente** per rilevare queste classi di problemi.
### Payload-generation helpers (2024+)
Creare grandi elenchi di parole personalizzati a mano è ingombrante. Lo strumento open-source **SSRF-PayloadMaker** (Python 3) può ora generare automaticamente *80 k+* combinazioni di manipolazione degli host, inclusi codifiche miste, downgrade forzato a HTTP e varianti di backslash:
```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
```
La lista risultante può essere inserita direttamente in Burp Intruder o `ffuf`.
## Riferimenti
- [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}}