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

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

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

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

Автор: Hack & Fix
Освоишь: CSP nonceoutput escapingtemplate autoescape
Легко+30 XP ~10 мин nodejs
CWE-79 · A03:2021 Pro
Обложка: XSS + обход CSP через unsafe-inline (Node.js) Обложка: XSS + обход CSP через unsafe-inline (Node.js)
Задача
# Reflected XSS при ослабленном CSP ## Сценарий **BrightCart** — магазин гаджетов на Node.js и Express. После прошлогодней утечки команда взялась за безопасность: каждый ответ приложения теперь несёт заголовок Content-Security-Policy. Фронтендер Илья уверен, что даже если в разметку когда-нибудь просочится чужой скрипт, браузер его не выполнит — политика не позволит. На почту безопасности пришёл отчёт сканера с подозрением на страницу поиска, и разбираться отправили вас. ## Цель 1. Проверьте, что значение поискового запроса попадает в HTML страницы каталога без экранирования. 2. Проверьте заголовки ответа и убедитесь, что политика безопасности действительно запрещает исполнение inline-скриптов. 3. Сконструируйте поисковый запрос, исполнение которого в браузере жертвы доставит её сессионный идентификатор на ваш Exploit Server. 4. Заманите администратора на страницу с запросом через форму отчёта, перехватите его сессию и заберите CTF-флаг из админ-раздела. ## Теория Content-Security-Policy — вторая линия обороны от XSS: даже если исполняемая разметка попала в HTML-ответ, браузер обязан выполнить только те скрипты, которые разрешены политикой. В этой лабе не работает обе линии. Первая: значение поиска возвращается на страницу каталога с явно отключённым экранированием шаблонизатора, поэтому разметка из запроса становится частью документа. Вторая: в директиве `script-src` стоит разрешение для inline-скриптов, и браузер послушно исполняет любой скрипт, внедрённый прямо в страницу. Защита включена, но формально — блокировать ей нечего и незачем. **Уязвимый паттерн:** ```js // Значение поиска выводится в шаблоне с отключённым экранированием, {{ query|safe }} // а политика явно разрешает inline-скрипты: "default-src 'self'; script-src 'self' 'unsafe-inline'; ..." ``` Скрипт, попавший в страницу через поле поиска, исполняется в контексте домена приложения: виден документ, куки, доступные JavaScript, и разрешённые политикой способы связи с внешними серверами. ## Точка входа атаки `GET /catalog` — форма поиска, поле `q`; введённое значение отображается на странице результатов. Канал доставки на жертву: `POST /report` — поле `url` со ссылкой на страницу каталога с вашим запросом. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** бот, который открывает присланные через форму отчёта ссылки в собственной авторизованной сессии — его пароль вам недоступен, работайте доставкой скрипта * **Exploit Server:** приёмник данных — ссылка на панели лабы

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

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

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

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

+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