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

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

CSRF: Активация распродажи без токена

Админ-эндпоинт активации распродажи не проверяет CSRF-токен. Заставь бота выполнить действие от имени admin.

Автор: Hack & Fix
Освоишь: double-submit tokenSameSite=StrictOrigin/Referer check
Легко+30 XP ~15 мин php
CWE-352 · A01:2021 Pro
Обложка: CSRF: Активация распродажи без токена Обложка: CSRF: Активация распродажи без токена
Задача
# CSRF (Подделка межсайтового запроса) ## Сценарий Вы проводите аудит безопасности **ГикГрад** — интернет-магазина гик-мерча, написанного на нативном PHP. Накануне масштабной акции руководитель проекта уверяет, что кнопка активации «секретной распродажи» в админ-панели надёжно защищена: панель видна только администратору, а разовая операция начисляет всем покупателям щедрый бонус на баланс. Вас, внешнего аудитора, приглашают проверить это утверждение: статический анализ намекнул, что у одной из форм панели нет подтверждения, которое приложение требует от всех остальных изменяющих операций. В вашем распоряжении аккаунт обычного покупателя и раздел «Report to Admin»: бот-администратор открывает присланные вами ссылки в собственном браузере, уже авторизованным в панели. Если подозрение подтвердится, бонус должен попасть и на ваш счёт. ## Цель 1. Изучите админ-панель и найдите операцию активации распродажи: сравните её форму с другими формами приложения и определите, какого элемента защиты не хватает. 2. Разместите на Exploit Server страницу, которая незаметно для посетителя отправит запрос на активацию распродажи от его имени. 3. Передайте ссылку на страницу боту через «Report to Admin» и дождитесь активации распродажи. 4. На начисленный бонус купите товар «CTF Flag» и получите флаг. ## Теория CSRF (Cross-Site Request Forgery) — атака, при которой сторонняя страница заставляет браузер жертвы отправить запрос на целевой сайт от её имени. Браузер автоматически прикрепляет сессионную cookie к любому запросу к домену магазина — в том числе к инициированному чужой страницей. Если сервер проверяет только cookie и роль пользователя, но не подтверждает, что действие совершено осознанно из самого приложения, привилегированная операция выполняется за администратора без его ведома. **Уязвимый паттерн:** ```php // Проверяется только личность и роль — подтверждение намерения не требуется: if ($user['role'] !== 'admin') { /* отказ в доступе */ } // ...и сразу выполняется привилегированное действие ``` Защищённые формы приложения передают серверу секретное значение, привязанное к сессии, — сторонний сайт прочитать его не может. У уязвимой операции такой проверки нет: чужая страница со скрытой формой, отправляющейся автоматически, заставит браузер администратора выполнить запрос. ## Точка входа атаки `POST /admin/activate-sale` — активация распродажи из админ-панели. * **Обычный пользователь:** `demo` / `demo` * **Доставка эксплойта:** Exploit Server (хостинг вашей страницы) и `POST /report` — отправка ссылки боту-администратору * **Признак успеха:** баланс пополняется бонусом — проверьте профиль и оформите заказ на товар «CTF Flag»

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

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

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

JSON-endpoint /api/profile принимает state-changing запрос без проверки CSRF-токена и кастомного заголовка X-Requested-With. Простой fetch с Content-Type:text/plain даёт CSRF.

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

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

Критичное действие смены пароля выполняется через GET-запрос. SameSite=Lax не защищает от top-level навигации. Сменив пароль администратора через CSRF, залогинься под admin и забери флаг.

+60 XP
PHP Pro
Exploit Fix