--- title: Web App Pentest - 0x0B SSRF tags: CSR - Web App Pentest slideOptions: transition: 'fade' parallaxBackgroundImage: 'https://i.imgur.com/YClZ1aY.jpg' --- <style> .reveal { font-size: 36px; } </style> ## SSRF ## Server Side Request Forgery --- ## A10:2021-Server-Side Request Forgery Атака, при которой атакующий заставляет уязвимый веб-сервер выполнять полезные для него сетевые запросы. --- ## SSRF Реализация атаки SSRF может позволить: * выполнять запросы на недоступные из внешней сети ресурсы * сканировать внутреннюю сеть * обходить проверки и ограничения --- ## SSRF Возникает когда атакующий может передать в параметрах URL-адрес или DNS-имя + порт или другие "координаты" сервиса и уязвимое веб-приложение использует их для выполнения запроса. --- ## SSRF <обзор docker-compose, пример базовый, задание Simple> --- ## SSRF <пример elasticsearch> - `http://host:9200/_cat/indices` - список индексов - `http://host:9200/index1/_search` - вывод данных в индексе Документации: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html --- ## SSRF Атакующий может отправлять запросы на ресурсы внутренней сети и анализировать ответы или время получения ответа. <Пример Blind SSRF: Сканирование портов> --- ## SSRF - адреса Серые IP адреса IP: - 192.168.X.Y - 172.X.0.Y - 10.X.0.X Также нужно попробовать DNS-имена из листов. --- ## SSRF - CRLF injection Чтобы мы могли добавлять команды в текстовые протоколы или заголовки/тело в HTTP-запросы нам нужна возможность добавлять новые строки. --- ## SSRF - CRLF injection Если цель - HTTP, и запрос мы контролируем не полностью, то мы можем отправить два запроса в одном TCP-соединении. HTTP-заголовок: `Connection: keep-alive` Если он установлен, веб-приложение не будет разрывать соединение и выполнит второй HTTP-запрос в том же соединении. <пример с запросом на internal_web> --- ## SSRF - CRLF injection <пример - удаление индекса в `elasticsearch`> --- ## SSRF - схемы Возможно полезные схемы: * file:// * data:// * php:// --- ## SSRF - защита (1 идея) Веб-приложения для защиты от обращений к внутренним ресурсам могут проверять IP-адреса передаваемых URL, убеждаться что они не локальные. <пример> --- ## SSRF - упражнение <Попасть в админскую секцию /admin.php через ssrf_check.php> --- ## SSRF - DNS rebinding Веб-приложение выполняет 2 DNS запроса, один для проверки, другой для отправки запроса. Мы можем передать контролируемое доменное имя, DNS-ответы для которого будут изменяться. --- ## SSRF - DNS rebinding http://1u.ms/ - ресурс, позволяющие реализовать такую атаку <пример обхода ssrf_check.php - читаем internal_web> --- ## SSRF - материалы [SSRF bible](https://cheatsheetseries.owasp.org/assets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet_SSRF_Bible.pdf) [A New Era of SSRF (video)](https://www.youtube.com/watch?v=D1S-G8rJrEk) [A New Era of SSRF (slides)](https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf) --- ## SSRF - Blind SSRF называется слепым, если мы не видим ответ от сервера. https://blog.assetnote.io/2021/01/13/blind-ssrf-chains/ --- ## SSRF - Windows Атакующий может заставить веб-сервер перейти по ссылке по протоколу SMB или по HTTP и затребовать SMB-аутентификацию. В результате: * хэш netntlm машины * SMB-relay --- ## SSRF - Защита - По возможности избегайте необходимости запросов по контролируемым пользователем координатам; - Если все же программируем, то: - Разберите URL на части, далее используйте только эти части - Разрезолвите домен, далее используйте IP, не используйте домен - Подставьте нужный домен в заголовок Host при запросе - Не забудьте отключить редиректы --- ## SSRF - Hardening - Создайте специальный изолированный контейнер, который не будет иметь доступ во внутреннюю сеть и поднимите на нем микросервис - Отключите ненужные вам схемы ---