CSRF: JSON API без кастомного заголовка (Flask)
JSON API endpoint /api/profile не требует кастомного заголовка X-Requested-With. Смени пароль admin через CSRF-атаку на API.
mediumpythonPro
Задача
# CSRF: атака на JSON API
## Сценарий
Перед вами интернет-магазин SecureShop. Команда разработки недавно мигрировала страницу настроек профиля с классических HTML-форм на современный JSON API: фронтенд отправляет POST-запросы с JSON-телом, бэкенд возвращает JSON-ответ. Разработчик уверен, что **новый API автоматически защищён от CSRF**, потому что HTML-формы не могут отправлять `application/json` напрямую. Это распространённое заблуждение, и ваша задача — продемонстрировать, в чём оно ошибочно.
В системе есть административная учётная запись с CTF-флагом, к которому имеет доступ только она. Используя CSRF-уязвимость в JSON API смены пароля, заставьте браузер админа сменить пароль на известное вам значение — и зайдите в админ-панель.
## Цели
1. Авторизуйтесь как `demo` / `demo` и изучите страницу настроек профиля. Откройте инструменты разработчика и посмотрите, как именно фронтенд общается с серверным API при сохранении изменений.
2. Найдите способ выполнить тот же запрос **с другого домена** — в обход «защиты», на которую полагается разработчик.
3. Доставьте подготовленную страницу-эксплойт администратору через предусмотренный для этого механизм отчётов.
4. После того как пароль администратора изменится, войдите от его имени и заберите CTF-флаг из админ-панели.
## Данные
| Параметр | Значение |
|----------|----------|
| Тестовый пользователь | `demo` / `demo` |
| Цель атаки | пользователь `admin` (изменение пароля через CSRF) |