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

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

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

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

Автор: Hack & Fix
Освоишь: CSP nonceoutput escapingtemplate autoescape
Легко+30 XP ~10 мин nodejs
CWE-79 · A03:2021 Pro
Обложка: Reflected XSS в поиске Node.js Обложка: Reflected XSS в поиске Node.js
Задача
# Reflected XSS (Отражённый запрос поиска) ## Сценарий «ЧипБарахолка» — барахолка электронных компонентов с поиском по каталогу. Запрос пользователя отражается на странице результатов («Результаты по запросу …»), и тестировщики заметили, что разметка из запроса при этом не нейтрализуется. В сервисе есть форма «Report to Admin»: администратор открывает присланные ссылки в собственном браузере под своей сессией. Сценарий инцидента напрашивается сам: отражённый XSS в поиске плюс отчёт администратору — и его сессия утекает атакующему вместе с доступом к служебной панели, где хранится флаг. Вам поручили отработать этот сценарий до конца. ## Цель 1. Подтвердите, что разметка из поискового запроса исполняется браузером как HTML. 2. Постройте ссылку, при открытии которой код в браузере жертвы доставит её сессионные cookie на ваш приёмник. 3. Отправьте ссылку администратору через форму отчёта, перехватите его сессию и заберите флаг из служебной панели. ## Теория Reflected XSS возникает, когда пользовательский ввод «отражается» в HTML-ответе без кодирования: разметка из параметра запроса становится частью страницы и исполняется браузером. Скрипт, запущенный на странице, работает в контексте приложения: видит его cookie и может действовать от имени жертвы. Отражённый вариант не хранится на сервере — payload живёт в самой ссылке, поэтому канал доставки критичен: здесь им служит форма отчёта, по которой администратор открывает присланный адрес уже авторизованным. **Уязвимый паттерн:** ```jinja {# Поисковый запрос выводится с отключённым экранированием: #} {{ query | safe }} ``` Механика словами: автоэкранирование шаблонизатора для значения запроса отключено явно, поэтому теги из параметра поиска попадают в разметку как есть. Сессионная кука приложения доступна JavaScript, и код атакующего может прочитать её и отправить на внешний приёмник — например, на выданный вместе с лабой Exploit Server. ## Точка входа атаки `GET /catalog` — страница каталога с формой поиска; отражаемый ввод — параметр `q`. `GET /report` и `POST /report` — форма отправки ссылки администратору. `GET /admin` — служебная панель, доступная роли администратора; в ней флаг. * **Тестовая учётная запись:** `demo` / `demo` * **Приёмник данных:** Exploit Server (ссылка на панели лабы)

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

другие лабы по этой уязвимости
Обложка лабы: 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
Обложка лабы: 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
Обложка лабы: Stored XSS в комментариях к товарам (Node.js) Обложка лабы: Stored XSS в комментариях к товарам (Node.js)
XSS

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

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

+60 XP
Node.js Pro
Exploit Fix