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

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

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

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

Автор: Hack & Fix
Освоишь: double-submit tokenSameSite=StrictOrigin/Referer check
Средне+60 XP ~30 мин nodejs
CWE-352 · A01:2021 Pro
Обложка: CSRF: Несанкционированное действие через поддельный запрос (Express) Обложка: CSRF: Несанкционированное действие через поддельный запрос (Express)
Задача
# CSRF: подделка межсайтового запроса ## Сценарий Вы — пентестер, исследующий **MarketPulse** — интернет-магазин на Express. В админ-панели есть привилегированные действия: удаление аккаунтов и активация специальной распродажи. Прямого доступа у вас нет, но в приложении работает механизм «Report to Admin»: пользователь отправляет ссылку, и администратор-бот её открывает. Заказчик просит проверить, можно ли через этот механизм заставить администратора сделать то, чего он не хотел. ## Цель 1. Войдите под обычным аккаунтом и изучите, какие привилегированные действия есть в админ-панели и какие из них защищены токеном. 2. Найдите действие, выполняемое только по роли, без «доказательства намерения». 3. Подготовьте страницу-приманку и доставьте её администратору через механизм отчётов. 4. Дождитесь выполнения действия от имени администратора и извлеките CTF-флаг из изменившегося каталога. ## Теория CSRF (Cross-Site Request Forgery, CWE-352) заставляет браузер жертвы отправить нежелательный запрос на доверенный сайт. Сторонняя страница не может прочитать cookie сессии, но браузер прикрепит её к запросу автоматически — и сервер, видя валидную сессию и роль, выполнит действие. Защита строится на втором факторе намерения: токене, который сторонний сайт знать не может. **Уязвимый паттерн:** ```javascript // Обработчик проверяет роль, но не происхождение запроса: app.post('/admin/activate-sale', (req, res) => { if (!user || user.role !== 'admin') return res.status(403).send('...'); // ...привилегированное действие выполняется... }); ``` Рядом в той же панели есть эквивалентное действие с проверкой токена, а это осталось без него. Достаточно, чтобы браузер авторизованного администратора отправил POST на этот адрес с любой страницы. ## Точка входа атаки `POST /admin/activate-sale` — активация специальной распродажи (только роль `admin`, без токена). Доставка страницы-приманки — Exploit Server и форма отчёта администратору. * **Обычный пользователь:** `demo` / `demo` * **Бот-администратор:** периодически открывает ссылки из отчётов

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

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

CSRF: JSON API без проверки происхождения запроса (Express)

JSON API /api/profile на Express принимает запросы без CSRF-токена и без проверки кастомного заголовка X-Requested-With. Смени пароль admin через cross-origin CSRF — затем войди и забери флаг.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: CSRF: SameSite=Lax обходится через GET (Express) Обложка лабы: CSRF: SameSite=Lax обходится через GET (Express)
CSRF

CSRF: SameSite=Lax обходится через GET (Express)

Эндпоинт смены email реализован через GET. SameSite=Lax не защищает top-level navigation — измени email админа через CSRF и забери флаг из /api/admin/email.

+90 XP
Node.js Pro
Exploit Fix
Обложка лабы: CSRF: Атака через JSON API без кастомных заголовков Обложка лабы: CSRF: Атака через JSON API без кастомных заголовков
CSRF

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

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: CSRF: Обход проверки Referer-заголовка Обложка лабы: CSRF: Обход проверки Referer-заголовка
CSRF

CSRF: Обход проверки Referer-заголовка

Приложение использует проверку заголовка Referer вместо CSRF-токена. Обойди проверку и смени email администратора.

+60 XP
Go Pro
Exploit Fix