Эта статья носит исключительно образовательный характер. Автор не несет ответственности за любые последствия ее прочтения.
Введение
Подделка запросов на стороне сервера (SSRF) - это атака, при которой злоумышленник может заставить уязвимый сервер инициировать вредоносные запросы к сторонним серверам и/или внутренним ресурсам.
Небольшое описание и пример возможностей данной уязвимости на реальном сайте.
Как правило, злоумышленник имеет полный или частичный контроль над отправляемым запросом, и сервер обрабатывает этот запрос без какой-либо проверки.
Применение
SSRF можно использовать для запросов к другим внутренним ресурсам, которые находятся за брандмауэром или не являются общедоступными.
Рассмотрим схему ниже.
![002ddd459ef0c714d6dc0.png](https://telegra.ph/file/002ddd459ef0c714d6dc0.png)
- Злоумышленник пытается получить доступ к внутреннему серверу, но доступ запрещен, поскольку брандмауэр блокирует прямой доступ к внутреннему серверу.
- Теперь, злоумышленник пытается получить доступ к общедоступному серверу. Он пытается создать запрос на общедоступном сервере, который отправит запрос на внутренний сервер.
- Внутренний сервер ответит на созданный запрос, поскольку он отправляется внутренними ресурсами
- Используя вышеуказанные шаги, злоумышленник получил доступ к внутреннему серверу, к которому он не мог получить доступ на шаге 1.
Сценарии атаки:
Сканирование портов
Сканирование портов на внутренних узлах, защищенных брандмауэром, позволяет злоумышленнику атаковать систему за брандмауэром для выполнения сканирования портов. По разнице в ответах злоумышленники могут сделать вывод об открытых и закрытых портах.
Определение сервисов и выявление конфиденциальной информации
Атакующий может определить версию SSH, DICT, SFTP и других протоколов, после чего отправить запрос на сервер, контролируемый злоумышленником. Аналогично можно запросить и другие сервисы, такие как FTP, DICT, GOPHER, ... и определить их версии.
Атака на внутренние приложения
Можно найти уязвимые параметры во внутренних сервисах или другие возможные уязвимости. Таким образом, злоумышленник может получить доступ к внутренним приложениям, манипулируя параметрами в запросе.
Доступ к файлам
Злоумышленник может получить доступ к файлам с локального веб-сервера с помощью обработчика файлов:
file:///etc/passwd
Пример эксплуатации
Наша цель - получить доступ к панели администратора и удалить одного из пользователей, недоступных извне.
Это приложение имеет стандартные функции, которые извлекают данные из внутренней системы. Интерфейс администратора находится по адресу
Теперь перехватываем запрос через Burp:
Запрос:
![e4120faf76db84fb7d8ac.png](https://telegra.ph/file/e4120faf76db84fb7d8ac.png)
Здесь мы ясно видим, что в теле «stockApi» передаётся URL и мы полностью контролируем этот параметр, а значит можем изменять его так, как захотим.
Отправим этот запрос ретранслятору и попробуем изменить параметр стандартного API.
Изменённый запрос и ответ на него:
![88cf3898073a5be5bd6c3.png](https://telegra.ph/file/88cf3898073a5be5bd6c3.png)
На скриншоте выше видим, что, изменив запрос, мы можем получить доступ к панели администратора. У нас есть три имени пользователя с соответствующими URL-адресами для удаления существующей учетной записи.
Попробуем заменить URL-адрес stockApi на ссылку для удаления пользователя и проверим результат.
Запрос:
![f0b47246b5d03cc569cdb.png](https://telegra.ph/file/f0b47246b5d03cc569cdb.png)
После отправки этого запроса получаем 302 (перенаправление):
![ddb795a4a35d212606fbf.png](https://telegra.ph/file/ddb795a4a35d212606fbf.png)
И, следуя перенаправлению, переходим на URL-адрес администратора с сообщением, что пользователь был удален.
![0ae89bce440b6a1793f82.png](https://telegra.ph/file/0ae89bce440b6a1793f82.png)
Таким образом, мы получили администраторский доступ и смогли удалить пользователя с помощью SSRF уязвимости.
На этом все, благодарю за просмотр!