←К лабораториямCSRF: Несанкционированное действие через поддельный запрос
+30 XP
Задача
# CSRF: подделка запроса от имени администратора
## Сценарий
Вы — внешний аудитор, приглашённый в компанию **CobaltCart**, которая держит небольшой онлайн-магазин фирменного мерча для инженерных команд. Ведущий разработчик Тимур недавно запустил новую функцию: кнопка активации секретной распродажи в админ-панели добавляет в каталог закрытый промо-товар. Ревью показало, что обработчик проверяет сессию и роль, но не проверяет происхождение запроса. У сервиса есть форма «Report to Admin»: администратор-модератор открывает каждую присланную ссылку, оставаясь залогиненным в системе.
## Цель
1. Изучите механизм активации секретной распродажи и убедитесь, что чувствительное действие не защищено CSRF-токеном.
2. Подготовьте HTML-страницу с формой, которая отправляется автоматически при открытии, и разместите её на Exploit Server.
3. Через форму `/report` передайте ссылку на эту страницу боту-администратору.
4. Дождитесь, пока действие выполнится от имени администратора, и найдите флаг в каталоге — он появится в описании товара «CTF Flag».
## Теория
**CSRF (Cross-Site Request Forgery)** — атака, при которой злоумышленник заставляет браузер жертвы отправить запрос на целевой сайт от её имени. Браузер прикрепляет cookies к любому запросу на домен приложения, включая запросы, инициированные страницей атакующего. Если сервер не отличает «свои» формы от «чужих», чувствительное действие выполняется с правами и сессией жертвы — сама жертва при этом может ничего не заметить.
Стандартная защита — CSRF-токен: уникальное значение, привязанное к сессии и встроенное в каждую форму скрытым полем. Внешний сайт не может прочитать cookies или значение токена жертвы (Same-Origin Policy), поэтому не способен подставить корректное значение, и сервер отвергает запрос без совпадающего токена.
**Уязвимый паттерн:**
```go
// Чувствительное действие: проверяется сессия и роль,
// но источник запроса не проверяется:
if user == nil || user.Role != "admin" { http.Error(w, "Access Denied", 403); return }
// Проверки CSRF-токена нет — запрос с чужого сайта будет выполнен
```
Механика атаки: атакующий размещает страницу с формой, отправляющейся при открытии, и адрес действия указывает на эндпоинт приложения. Жертва с активной admin-сессией открывает страницу — её браузер отправляет форму вместе с cookies администратора, и сервер выполняет действие.
## Точка входа атаки
| Параметр | Значение |
|----------|----------|
| Ваш аккаунт | `demo` / `demo` |
| Уязвимый эндпоинт | `POST /admin/activate-sale` |
| Доставка боту | `POST /report`, поле `url` |
| Хостинг payload | Exploit Server (панель лабы, загрузка страницы) |
| Где появится флаг | `GET /catalog`, товар «CTF Flag» |
Админ-эндпоинт активации распродажи не проверяет CSRF-токен. Заставь бота выполнить действие от имени admin.
Админ-эндпоинт активации распродажи не проверяет CSRF-токен. Заставь бота выполнить действие от имен…
+30 XP
PHP Pro
ExploitFix
Мы используем cookies —··
Cookies и аналитика.Технически необходимые cookies (вход, безопасность, работа сайта) — всегда; Яндекс Метрика и Вебвизор — только с вашего согласия. Подробнее: cookies, приватность.