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

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

Stored XSS в комментариях к товарам (Node.js)

Комментарии к товарам рендерятся через nunjucks-фильтр |safe без санитайзинга. Укради сессию администратора через Stored XSS, чтобы получить доступ к флагу.

Автор: Hack & Fix
Освоишь: CSP nonceoutput escapingtemplate autoescape
Средне+60 XP ~25 мин nodejs
CWE-79 · A03:2021 Pro
Обложка: Stored XSS в комментариях к товарам (Node.js) Обложка: Stored XSS в комментариях к товарам (Node.js)
Задача
# Хранимая XSS (Stored XSS в комментариях) ## Сценарий **GearTalk** — магазин девайсов на Node.js и Express, где отзывы — главная фишка: на странице каждого товара авторизованный пользователь оставляет комментарий, тот сохраняется в базе и показывается всем посетителям. Стажёр Максим разрешил HTML в тексте комментариев, чтобы отзывы «жили»: жирный шрифт, эмоции, акценты. Модерации комментариев нет, и Максим давно занят другими задачами. На релизный обзор безопасности прислали именно вас. ## Цель 1. Проверьте, что разметка из текста комментария исполняется при открытии страницы товара — у каждого посетителя. 2. Сконструируйте комментарий, исполнение которого в браузере жертвы доставит её сессионный идентификатор на ваш Exploit Server. 3. Заманите администратора на страницу с комментарием через форму отчёта, перехватите его сессию и заберите CTF-флаг из админ-раздела. ## Теория Хранимая XSS отличается от отражённой тем, что вредоносная разметка сохраняется на сервере один раз и исполняется автоматически при каждом просмотре страницы — специально сконструированная ссылка не нужна. Источник здесь — текст комментария, приёмник — вывод в HTML страницы товара: шаблон для комментариев явно отключает авто-экранирование шаблонизатора, и любые теги из сохранённого текста становятся живыми элементами страницы. **Уязвимый паттерн:** ```html <!-- Текст комментария выводится с отключённым экранированием: --> <p class="comment-text">{{ c.text|safe }}</p> ``` Шаблонизатор по умолчанию экранирует спецсимволы в интерполируемых значениях, превращая разметку в видимый текст. Явный фильтр «доверяй этому значению» отключает защиту: всё, что попало в поле комментария, исполняется в браузере каждого посетителя страницы товара с правами её скриптов. ## Точка входа атаки `POST /product/<id>/comment` — форма комментария на странице товара, поле `text`. Канал доставки на жертву: `POST /report` — ссылка на страницу товара с вашим комментарием. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** бот, который открывает присланные через форму отчёта ссылки в собственной авторизованной сессии — его пароль вам недоступен, комментарий должен сработать в его браузере сам * **Exploit Server:** приёмник данных — ссылка на панели лабы

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

другие лабы по этой уязвимости
Обложка лабы: XSS через атрибут (javascript: URL) в Node.js Обложка лабы: XSS через атрибут (javascript: URL) в Node.js
XSS

XSS через атрибут (javascript: URL) в Node.js

XSS через javascript: URL-схему в атрибуте href. Nunjucks экранирует HTML-сущности, но не блокирует опасные URL-схемы.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: DOM XSS через location.hash и innerHTML (Express) Обложка лабы: DOM XSS через location.hash и innerHTML (Express)
XSS

DOM XSS через location.hash и innerHTML (Express)

Клиентский JavaScript на странице каталога читает фрагмент URL (location.hash) и вставляет его через innerHTML без санитизации. Серверный код чист, защита и уязвимость живут полностью в браузерном JS.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: XSS + обход CSP через unsafe-inline (Node.js) Обложка лабы: XSS + обход CSP через unsafe-inline (Node.js)
XSS

XSS + обход CSP через unsafe-inline (Node.js)

Поисковый запрос выводится через |safe без экранирования, а CSP содержит unsafe-inline — inline-скрипты не блокируются. Исправь экранирование и убери unsafe-inline из script-src.

+30 XP
Node.js Pro
Exploit Fix
Обложка лабы: Reflected XSS в поиске Node.js Обложка лабы: Reflected XSS в поиске Node.js
XSS

Reflected XSS в поиске Node.js

Поисковый запрос выводится через |safe фильтр Nunjucks без экранирования. Выполни произвольный JS и укради cookie администратора.

+30 XP
Node.js Pro
Exploit Fix