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

This commit is contained in:
Translator 2025-07-22 08:44:43 +00:00
parent 3865bf190a
commit 901863526c

View File

@ -146,7 +146,7 @@ next={domain}&next=attacker.com
```
### Paths and Extensions Bypass
Jeśli wymagane jest, aby URL kończył się ścieżką lub rozszerzeniem, lub musiał zawierać ścieżkę, możesz spróbować jednego z następujących obejść:
Jeśli wymagana jest końcówka URL w postaci ścieżki lub rozszerzenia, lub musi zawierać ścieżkę, możesz spróbować jednego z następujących obejść:
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -158,7 +158,7 @@ Narzędzie [**recollapse**](https://github.com/0xacb/recollapse) może generowa
### Automatic Custom Wordlists
Sprawdź [**arkusz oszustw dotyczący obejścia walidacji URL**](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) z portswigger, gdzie możesz wprowadzić dozwolony host i host atakującego, a on wygeneruje listę URL do przetestowania. Uwzględnia również, czy możesz użyć URL w parametrze, w nagłówku Host lub w nagłówku CORS.
Sprawdź [**arkusz oszustw dotyczący obejścia walidacji URL**](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) od portswigger, gdzie możesz wprowadzić dozwolony host i atakujący, a on wygeneruje listę URL-i do przetestowania. Uwzględnia również, czy możesz użyć URL w parametrze, w nagłówku Host lub w nagłówku CORS.
{{#ref}}
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
@ -167,7 +167,7 @@ https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
### Bypass via redirect
Możliwe, że serwer **filtruje oryginalne żądanie** SSRF **ale nie** możliwą **odpowiedź przekierowania** na to żądanie.\
Na przykład, serwer podatny na SSRF poprzez: `url=https://www.google.com/` może **filtruje parametr url**. Ale jeśli użyjesz [serwera python do odpowiedzi z kodem 302](https://pastebin.com/raw/ywAUhFrv) do miejsca, w które chcesz przekierować, możesz być w stanie **uzyskać dostęp do filtrowanych adresów IP** jak 127.0.0.1 lub nawet filtrowanych **protokółów** jak gopher.\
Na przykład, serwer podatny na SSRF poprzez: `url=https://www.google.com/` może **filtruje parametr url**. Ale jeśli użyjesz [serwera python do odpowiedzi z kodem 302](https://pastebin.com/raw/ywAUhFrv) w miejsce, gdzie chcesz przekierować, możesz być w stanie **uzyskać dostęp do filtrowanych adresów IP** jak 127.0.0.1 lub nawet filtrowanych **protokołów** jak gopher.\
[Sprawdź ten raport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
```python
#!/usr/bin/env python3
@ -193,13 +193,13 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Sztuczka z ukośnikiem
Sztuczka _backslash-trick_ wykorzystuje różnicę między [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) a [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Podczas gdy RFC3986 jest ogólnym ramowym dokumentem dla URI, WHATWG jest specyficzny dla adresów URL w sieci i jest przyjęty przez nowoczesne przeglądarki. Kluczowa różnica polega na tym, że standard WHATWG uznaje ukośnik wsteczny (`\`) za równoważny ukośnikowi (`/`), co wpływa na sposób, w jaki adresy URL są analizowane, szczególnie oznaczając przejście od nazwy hosta do ścieżki w adresie URL.
Sztuczka z _backslash_ wykorzystuje różnicę między [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) a [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Podczas gdy RFC3986 jest ogólnym ramowym dokumentem dla URI, WHATWG jest specyficzny dla adresów URL w sieci i jest przyjęty przez nowoczesne przeglądarki. Kluczowa różnica polega na uznaniu znaku backslash (`\`) przez standard WHATWG za równoważny ukośnikowi (`/`), co wpływa na sposób, w jaki adresy URL są analizowane, szczególnie oznaczając przejście od nazwy hosta do ścieżki w adresie 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)
### Lewy nawias kwadratowy
Znak „lewy nawias kwadratowy” `[` w segmencie userinfo może spowodować, że UriComponentsBuilder w Springu zwróci wartość nazwy hosta, która różni się od przeglądarek: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
Znak „lewy nawias kwadratowy” `[` w segmencie userinfo może spowodować, że UriComponentsBuilder Springa zwróci wartość nazwy hosta, która różni się od przeglądarek: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
### Inne nieporozumienia
@ -207,10 +207,42 @@ Znak „lewy nawias kwadratowy” `[` w segmencie userinfo może spowodować, ż
obraz z [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
### Sztuczka z identyfikatorem strefy IPv6 (%25)
Nowoczesne analizatory URL, które wspierają RFC 6874, pozwalają na *link-local* adresy IPv6, aby zawierały **identyfikator strefy** po znaku procenta. Niektóre filtry zabezpieczeń nie są świadome tej składni i będą usuwać tylko literały IPv6 w nawiasach kwadratowych, pozwalając na dotarcie następującego ładunku do wewnętrznego interfejsu:
```text
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
```
Jeśli aplikacja docelowa weryfikuje, że host *nie* jest `fe80::1`, ale przestaje analizować na `%`, może błędnie traktować żądanie jako zewnętrzne. Zawsze normalizuj adres **przed** podjęciem jakiejkolwiek decyzji dotyczącej bezpieczeństwa lub całkowicie usuń opcjonalny identyfikator strefy.
### Ostatnie CVE związane z analizą bibliotek (20222025)
Wiele popularnych frameworków miało problemy z niezgodnością nazw hostów, które mogą być wykorzystane do SSRF, gdy walidacja URL została ominięta za pomocą wymienionych powyżej sztuczek:
| Rok | CVE | Komponent | Streszczenie błędu | Minimalny PoC |
|------|-----|-----------|--------------|-------------|
| 2024 | CVE-2024-22243 / 22262 | Spring `UriComponentsBuilder` | `[` nie jest dozwolone w sekcji *userinfo*, więc `https://example.com\[@internal` jest analizowane jako host `example.com` przez Spring, ale jako `internal` przez przeglądarki, co umożliwia otwarte przekierowanie i SSRF, gdy używane są listy dozwolonych hostów. Zaktualizuj do Spring 5.3.34 / 6.0.19 / 6.1.6+. |
| 2023 | CVE-2023-27592 | **urllib3** <1.26.15 | Mylenie z ukośnikiem pozwoliło na ominięcie filtrów hostów, które dzielą na `@` w `http://example.com\\@169.254.169.254/`. |
| 2022 | CVE-2022-3602 | OpenSSL | Weryfikacja nazwy hosta pominięta, gdy nazwa kończy się na `.` (mylenie z domeną bez kropki). |
Kiedy polegasz na parserach URL stron trzecich, **porównaj kanonizowany host zwrócony przez zaufaną bibliotekę z surowym ciągiem dostarczonym przez użytkownika**, aby wykryć te klasy problemów.
### Pomocnicy do generowania ładunków (2024+)
Tworzenie dużych, niestandardowych list słów ręcznie jest uciążliwe. Narzędzie open-source **SSRF-PayloadMaker** (Python 3) może teraz automatycznie generować *80 k+* kombinacji modyfikacji hostów, w tym mieszane kodowania, wymuszone obniżenie HTTP i warianty z ukośnikiem:
```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
```
Otrzymana lista może być bezpośrednio użyta w Burp Intruder lub `ffuf`.
## Odniesienia
- [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}}