Перейти к содержимому

Поиск по платформе

CSRF: Несанкционированное действие через поддельный запрос (Flask)

Форма администратора не защищена CSRF-токеном. Заставь бота выполнить действие от имени admin.

Автор: Hack & Fix
Освоишь: double-submit tokenSameSite=StrictOrigin/Referer check
Легко+30 XP ~15 мин python
CWE-352 · A01:2021 Pro
Обложка: CSRF: Несанкционированное действие через поддельный запрос (Flask) Обложка: CSRF: Несанкционированное действие через поддельный запрос (Flask)
Задача
# CSRF: подделка межсайтового запроса ## Сценарий Вы проводите аудит безопасности **ByteBunker** — интернет-магазина гик-мерча на Flask, который собственными силами собрал основатель Дима. Помимо витрины, в приложении есть админ-панель: список пользователей, удаление аккаунтов и «секретная распродажа», запускаемая одной кнопкой. Дима уверен, что панель надёжно закрыта: каждый обработчик проверяет роль пользователя. Поводом для проверки стала странная жалоба — каталог обновился сам собой, хотя никто из команды кнопку не нажимал. В магазине предусмотрен функционал «Report to Admin»: покупатель отправляет ссылку, и администратор (бот, периодически просматривающий отчёты) её открывает. Это готовый канал доставки — классическая атака **Cross-Site Request Forgery**. ## Цель 1. Авторизуйтесь как обычный пользователь и изучите разметку админ-панели в той части, что доступна неадминистратору: формы привилегированных действий присутствуют в общем HTML. 2. Сравните формы между собой и найдите действие, для отправки которого не требуется «доказательство намерения» — токен. 3. Подготовьте страницу, которая сразу после открытия отправляет это действие от имени посетителя, и доставьте её администратору через механизм отчётов. 4. Когда распродажа активируется, купите товар **CTF Flag** в каталоге — флаг отобразится в профиле. ## Теория CSRF эксплуатирует поведение браузера: сессионная cookie прикрепляется к любому запросу на домен приложения — независимо от того, кто инициировал запрос. Если обработчик изменяющего состояние действия проверяет только аутентичность сессии, сторонняя страница может заставить браузер жертвы отправить нужный POST: сервер увидит валидную сессию и выполнит действие от имени жертвы. Защита строится на втором, недоступном атакующем секрете — CSRF-токене, который сервер выдаёт вместе с формой. **Уязвимый паттерн:** ```python @app.route('/admin/activate-sale', methods=['POST']) def activate_sale(): user = get_user() if not user or user['role'] != 'admin': return 'Access Denied', 403 ``` После проверки роли обработчик сразу выполняет действие. Сверки «доказательства намерения» с секретом сессии здесь нет — в отличие от соседнего обработчика удаления пользователей. ## Точка входа атаки `POST /admin/activate-sale` — форма без обязательных полей (проверяется только роль и сессия). Доставка — `POST /report` с полем `url`: ссылка на подготовленную страницу, размещённую на сервере эксплойтов. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** управляется ботом отчётов; отдельные учётные данные не нужны

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: CSRF: JSON API без кастомного заголовка (Flask) Обложка лабы: CSRF: JSON API без кастомного заголовка (Flask)
CSRF

CSRF: JSON API без кастомного заголовка (Flask)

JSON API endpoint /api/profile не требует кастомного заголовка X-Requested-With. Смени пароль admin через CSRF-атаку на API.

+60 XP
Python Pro
Exploit Fix
Обложка лабы: CSRF: Обход проверки Referer (Flask) Обложка лабы: CSRF: Обход проверки Referer (Flask)
CSRF

CSRF: Обход проверки Referer (Flask)

Приложение проверяет Referer как защиту от CSRF, но проверка некорректна — атакующий может обойти её, указав домен жертвы как часть пути.

+60 XP
Python Pro
Exploit Fix
Обложка лабы: CSRF: SameSite=Lax Bypass через GET-запрос (Flask) Обложка лабы: CSRF: SameSite=Lax Bypass через GET-запрос (Flask)
CSRF

CSRF: SameSite=Lax Bypass через GET-запрос (Flask)

Endpoint смены email доступен через GET. SameSite=Lax не защищает от top-level GET navigation — измени email admin одной ссылкой.

+60 XP
Python Pro
Exploit Fix