SSRF: Cloud Metadata Bypass
SSRF-защита проверяет is_loopback но не is_link_local — доступ к cloud metadata 169.254.169.254.
mediumpythonPro
Задача
# SSRF: обход фильтра через облачный metadata-сервис
## Сценарий
Перед вами Flask-приложение интернет-магазина SecureShop. В нём есть функция «сравнение цен»: пользователь подаёт URL внешнего магазина, сервер скачивает страницу и показывает её содержимое в ответ. В отличие от типичной SSRF-уязвимости первого уровня, здесь разработчик уже знал про SSRF и **добавил фильтр** — обращения к адресам, обозначающим «локальное» с точки зрения сервера, отвергаются.
Однако фильтр сделан невнимательно: он закрывает только одну из нескольких категорий непубличных адресов. Приложение развёрнуто в облачной среде (AWS/GCP/Azure-подобный инстанс), и среди непубличных адресов есть особый класс, доступный изнутри инстанса. Через него обычно достаются креденшалы виртуальной машины, не предназначенные для внешнего мира. Ваша задача — найти этот класс и использовать его, чтобы достать CTF-флаг.
## Цели
1. Авторизуйтесь как `demo` / `demo` и найдите функцию загрузки URL.
2. Эмпирически установите, какие классы непубличных адресов фильтр блокирует, а какие — пропускает.
3. Воспользуйтесь обнаруженной слабостью фильтра, чтобы достучаться до облачного metadata-сервиса инстанса и получить от него credentials.
4. Извлеките CTF-флаг из ответа metadata-сервиса.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |