Перейти к содержимому
← Каталог python SSRF

SSRF: Redirect Bypass

Обработчик загрузки аватара проверяет IP начального URL, но requests.get() автоматически следует редиректам — внешний сервер перенаправляет на внутренний адрес.

mediumpythonPro
Задача
# SSRF: обход фильтра через HTTP-редиректы ## Сценарий Перед вами Flask-приложение интернет-магазина SecureShop с функцией загрузки аватара по URL — пользователь подаёт ссылку, сервер скачивает изображение и сохраняет его как аватар. Эта функция, как и любая «дай-серверу-сделать-HTTP-запрос-по-моему-URL», классически подвержена SSRF. В отличие от базовой SSRF-уязвимости, разработчик уже знал про класс проблемы и **добавил фильтр** — перед запросом проверяется, что хост URL не относится к loopback или приватным сетям. Однако фильтр неполноценный: он проверяет одну точку, тогда как HTTP-запрос — это в общем случае последовательность шагов. Между «фильтр одобрил» и «сервер реально подключился к внутреннему ресурсу» всё ещё есть зазор, который можно эксплуатировать. Дополнительно фильтр содержит «удобство для разработки»: список доверенных внутренних hostname'ов, которые пропускаются без IP-проверки (типичный enterprise-паттерн — `prometheus.internal`, `auth-service.local`, etc.). Если такой trusted-сервис умеет редиректить на произвольный URL (даже непреднамеренно — через эндпоинт партнёрского трекинга, OAuth callback и т.п.), вся защита разваливается. Ваша задача — понять, что именно фильтр упустил из виду, и использовать это, чтобы дотянуться до внутреннего сервиса с CTF-флагом. ## Цели 1. Авторизуйтесь как `demo` / `demo` и найдите функцию загрузки аватара по URL. 2. Сначала убедитесь, что прямые обращения к адресам из приватных диапазонов фильтр действительно блокирует. 3. Найдите способ заставить сервер всё равно обратиться к внутреннему ресурсу, формально не подавая в фильтр «локальный» URL. 4. Извлеките CTF-флаг из ответа внутреннего сервиса. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` | > Подсказка: в инфраструктуре есть «доверенный» внутренний сервис, который умеет отвечать HTTP-редиректом на адрес из query-параметра — он создан как helper для SSRF-лаб, но точно так же мог бы появиться в реальной системе как partner-tracking endpoint. Найдите его в фильтре и попробуйте использовать.
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru