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

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

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

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

Автор: Hack & Fix
Освоишь: double-submit tokenSameSite=StrictOrigin/Referer check
Средне+60 XP ~30 мин python
CWE-352 · A01:2021 Pro
Обложка: CSRF: Обход проверки Referer (Flask) Обложка: CSRF: Обход проверки Referer (Flask)
Задача
# CSRF: обход проверки заголовка Referer ## Сценарий Вы проводите аудит **PicoStore** — интернет-магазина на Flask. Разработчик Артём знает об атаках класса CSRF и попытался закрыть ими уязвимое место — смену адреса электронной почты в личном кабинете. Вместо стандартного механизма токенов он выбрал «лёгкий» путь: проверять заголовок `Referer`, требуя, чтобы запрос пришёл со страниц самого магазина. Имя домена, которое Артём зашил в проверку, осталось со времён внутренней среды разработки. Инвестор усомнился в такой самодеятельности — вам поручили проверить её на прочность. В приложении есть служебная почта и механизм «Report to Admin»: отправленная ссылка открывается браузером администратора-бота. Если защита Артёма обходится, смена чужого email открывает путь к чужим письмам — а служебное уведомление о смене адреса администратора содержит флаг. ## Цель 1. Авторизуйтесь как обычный пользователь, найдите форму смены email и определите, как именно сервер пытается защитить её от CSRF. 2. Изучите реализацию проверки и найдите способ выполнить запрос со сторонней страницы так, чтобы проверка его пропустила. 3. Подготовьте страницу-эксплойт и доставьте её администратору через механизм отчётов, сменив его email на адрес, доступный вам. 4. Откройте служебную почту под своим пользователем и заберите флаг из уведомления о смене адреса. ## Теория Referer сообщает серверу, с какой страницы отправлен запрос. Проблема в том, что это обычная строка, а «принадлежность магазину» проверяется поиском в ней подстроки. Подстрока может встретиться в любой части URL — не только в имени домена отправителя. Страница атакующего способна «вписать» ожидаемую строку в собственный адрес, и формально условие окажется выполненным, хотя запрос по-прежнему инициирован чужим сайтом. Дополнительно современные браузеры по умолчанию сокращают передаваемый Referer, а страница атакующего сама управляет своей политикой передачи — полагаться на этот заголовок как на секрет нельзя. **Уязвимый паттерн:** ```python referer = request.headers.get('Referer', '') if 'secureshop.local' not in referer: return 'Invalid request origin', 403 ``` Вхождение подстроки — не сравнение домена: любой URL, где ожидаемая строка встречается хотя бы где-то, проходит проверку. ## Точка входа атаки `POST /profile/change-email` — поле `email`. Доставка — `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: 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
Обложка лабы: CSRF: Атака через JSON API без кастомных заголовков Обложка лабы: CSRF: Атака через JSON API без кастомных заголовков
CSRF

CSRF: Атака через JSON API без кастомных заголовков

JSON API эндпоинт не требует кастомных заголовков. Используй CSRF для смены пароля admin через API.

+60 XP
Go Pro
Exploit Fix