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

This commit is contained in:
Translator 2025-07-22 08:44:49 +00:00
parent ce34d0068f
commit 36e3d6483d

View File

@ -158,7 +158,7 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
### Automatic Custom Wordlists
Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα Host header ή σε ένα CORS header.
Δείτε το [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείτε να εισάγετε τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα URLs για να δοκιμάσετε. Επίσης, εξετάζει αν μπορείτε να χρησιμοποιήσετε το URL σε μια παράμετρο, σε ένα header Host ή σε ένα header CORS.
{{#ref}}
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
@ -193,24 +193,56 @@ HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
### Blackslash-trick
Το _backslash-trick_ εκμεταλλεύεται μια διαφορά μεταξύ του [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) και του [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Ενώ το RFC3986 είναι ένα γενικό πλαίσιο για URIs, το WHATWG είναι συγκεκριμένο για web URLs και έχει υιοθετηθεί από σύγχρονους περιηγητές. Η βασική διάκριση έγκειται στην αναγνώριση του backslash (`\`) από το WHATWG standard ως ισοδύναμου με το forward slash (`/`), επηρεάζοντας τον τρόπο που αναλύονται τα URLs, συγκεκριμένα σημειώνοντας τη μετάβαση από το hostname στο path σε ένα URL.
Το _backslash-trick_ εκμεταλλεύεται μια διαφορά μεταξύ του [WHATWG URL Standard](https://url.spec.whatwg.org/#url-parsing) και του [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). Ενώ το RFC3986 είναι ένα γενικό πλαίσιο για URIs, το WHATWG είναι συγκεκριμένο για web URLs και έχει υιοθετηθεί από σύγχρονους περιηγητές. Η βασική διάκριση έγκειται στην αναγνώριση του backslash (`\`) από το πρότυπο WHATWG ως ισοδύναμου με το forward slash (`/`), επηρεάζοντας τον τρόπο που αναλύονται τα URLs, συγκεκριμένα σημειώνοντας τη μετάβαση από το hostname στο path σε ένα 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)
### Αριστερό τετράγωνο αγκύλη
Ο χαρακτήρας “αριστερό τετράγωνο αγκύλη” `[` στο τμήμα userinfo μπορεί να προκαλέσει την UriComponentsBuilder του Spring να επιστρέψει μια τιμή hostname που διαφέρει από τους περιηγητές: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
Ο χαρακτήρας “αριστερή τετράγωνη αγκύλη” `[` στο τμήμα userinfo μπορεί να προκαλέσει την UriComponentsBuilder του Spring να επιστρέψει μια τιμή hostname που διαφέρει από τους περιηγητές: [https://example.com\[@attacker.com](https://portswigger.net/url-cheat-sheet#id=1da2f627d702248b9e61cc23912d2c729e52f878)
### Άλλες Συγχύσεις
### Άλλες Σύγχυσεις
![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/)
### IPv6 Zone Identifier (%25) Trick
Οι σύγχρονοι αναλυτές URLs που υποστηρίζουν το RFC 6874 επιτρέπουν τις *link-local* IPv6 διευθύνσεις να περιλαμβάνουν έναν **zone identifier** μετά από ένα ποσοστό. Ορισμένα φίλτρα ασφαλείας δεν είναι ενήμερα για αυτή τη σύνταξη και θα αφαιρέσουν μόνο τις IPv6 λογιές που είναι σε τετράγωνες αγκύλες, επιτρέποντας το παρακάτω payload να φτάσει σε μια εσωτερική διεπαφή:
```text
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
```
Αν η στοχευμένη εφαρμογή επαληθεύει ότι ο κόμβος *δεν είναι* `fe80::1` αλλά σταματά την ανάλυση στο `%`, μπορεί να θεωρήσει λανθασμένα το αίτημα ως εξωτερικό. Πάντα να κανονικοποιείτε τη διεύθυνση **πριν** από οποιαδήποτε απόφαση ασφαλείας ή να αφαιρείτε εντελώς το προαιρετικό zone id.
### Πρόσφατα CVEs ανάλυσης βιβλιοθηκών (20222025)
Ένα αριθμός κύριων πλαισίων έχει υποστεί προβλήματα ασυμφωνίας ονομάτων που μπορούν να εκμεταλλευτούν για SSRF μόλις η επαλήθευση URL έχει παρακαμφθεί με τα κόλπα που αναφέρονται παραπάνω:
| Έτος | CVE | Συστατικό | Περίληψη σφάλματος | Ελάχιστο PoC |
|------|-----|-----------|--------------|-------------|
| 2024 | CVE-2024-22243 / 22262 | Spring `UriComponentsBuilder` | `[` δεν επιτρέπεται στην ενότητα *userinfo*, έτσι το `https://example.com\[@internal` αναλύεται ως κόμβος `example.com` από το Spring αλλά ως `internal` από τους περιηγητές, επιτρέποντας open-redirect & 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, **συγκρίνετε τον κανονικοποιημένο κόμβο που επιστρέφεται από τη βιβλιοθήκη που εμπιστεύεστε με τη raw συμβολοσειρά που παρέχεται από τον χρήστη** για να ανιχνεύσετε αυτές τις κατηγορίες προβλημάτων.
### Βοηθήματα δημιουργίας payload (2024+)
Η δημιουργία μεγάλων προσαρμοσμένων λιστών λέξεων με το χέρι είναι χρονοβόρα. Το εργαλείο ανοιχτού κώδικα **SSRF-PayloadMaker** (Python 3) μπορεί τώρα να δημιουργήσει αυτόματα *80 k+* συνδυασμούς παραμόρφωσης κόμβων, συμπεριλαμβανομένων μεικτών κωδικοποιήσεων, υποχρεωτικής υποβάθμισης HTTP και παραλλαγών με αντίστροφη κάθετο:
```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}}