Перейти к содержимому
← Каталог python XSS

XSS + обход CSP через unsafe-inline

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

easypythonPro
Задача
# Reflected XSS + ослабленный CSP ## Сценарий Перед вами Flask-приложение интернет-магазина SecureShop. На странице каталога есть форма поиска: введённый запрос отображается на странице результатов («Showing results for..»). Эта часть выглядит знакомо — ровно то же место, что в базовой Reflected XSS-задаче, и устроено оно тем же способом: значение возвращается в HTML без экранирования. Отличие этой задачи — приложение пытается дополнительно защититься на уровне браузера через заголовок Content-Security-Policy. Идея CSP правильная: даже если в HTML-ответе оказался исполняемый скрипт, браузер не должен его выполнять, если он не разрешён политикой. Но в этой реализации политика составлена с типичной ошибкой — в директиве `script-src` присутствует разрешение `unsafe-inline`, которое **явно разрешает** браузеру исполнять любые inline-скрипты. То есть защитный механизм формально включён, но в работающем виде ничего не блокирует. В итоге обе линии обороны не работают: значение поиска попадает в HTML без экранирования, и CSP не запрещает исполнять скрипт из этого значения. С формой «Report to Admin» в качестве канала доставки на админа всё сводится к стандартной краже сессии и эскалации до админских прав, под которыми приложение отдаёт CTF-флаг. ## Цели 1. Подтвердите две независимые проблемы: значение запроса попадает в HTML-ответ без экранирования (исполняемая разметка проходит), и заголовок Content-Security-Policy в `script-src` не запрещает inline-скрипты. Каждую проверку делайте отдельно — этого достаточно, чтобы убедиться, что защита есть только на бумаге. 2. Сконструируйте поисковый запрос с payload'ом, который из браузера жертвы доставит её сессионный идентификатор на ваш Exploit Server. 3. Доставьте администратора по ссылке на страницу с этим запросом через форму отчёта; перехватите его сессию; войдите от его имени на админский раздел и заберите CTF-флаг. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` | | Exploit Server | ссылка «Exploit Server» на панели лабы |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru