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

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

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

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

Автор: Hack & Fix
Освоишь: CSP nonceoutput escapingtemplate autoescape
Легко+30 XP ~10 мин python
CWE-79 · A03:2021 Pro
Обложка: XSS + обход CSP через unsafe-inline Обложка: XSS + обход CSP через unsafe-inline
Задача
# Reflected XSS при ослабленной политике безопасности контента ## Сценарий Вы — аудитор **TechnoShelf**, интернет-магазина электроники. После внутреннего обучения по безопасности разработчики «усилили» приложение: ко всем ответам добавлен заголовок политики безопасности контента, который должен останавливать исполнение внедрённых скриптов даже при ошибке в разметке. Вас попросили проверить, как новая защита сочетается со страницей каталога: поисковый запрос отражается там на странице результатов, и продуктовая команда уверяет, что «теперь всё закрыто в два слоя». ## Цель 1. Подтвердите первую проблему: значение поискового запроса попадает в HTML-ответ без экранирования — разметка из запроса исполняется браузером. 2. Подтвердите вторую проблему: политика безопасности контента в ответах не запрещает исполнение встроенных в разметку скриптов. Проверки выполняйте независимо. 3. Соберите нагрузку, доставляющую cookie администратора на ваш Exploit Server с учётом ограничений политики, отправьте боту ссылку, перехватите его сессию и заберите CTF-флаг из админ-раздела. ## Теория Политика безопасности контента — вторая линия обороны: если экранирование пропустило исполняемую вставку в HTML, браузер обязан отказать ей в запуске. Но политика работает только в строгом виде: отдельные разрешения, включённые «чтобы ничего не сломалось», полностью отключают эту линию для целого класса вставок. **Уязвимый паттерн:** ```python response.headers['Content-Security-Policy'] = ( "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'") ``` В директиве источников скриптов разрешены и собственный сайт, и встроенные вставки — то есть любой скрипт, попавший в HTML, будет исполнен. При этом источники по умолчанию ограничены собственным сайтом: сторонние ресурсы и сетевые запросы из скрипта блокируются, но переход самой страницы куда-либо политика не контролирует — это и есть путь наружу для перехваченных данных. ## Точка входа атаки `GET /catalog` с параметром `q` — отражение запроса на странице результатов. Доставка боту-администратору — `POST /report` с полем `url`. * **Обычный пользователь:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: DOM XSS через location.hash и innerHTML Обложка лабы: DOM XSS через location.hash и innerHTML
XSS

DOM XSS через location.hash и innerHTML

Клиентский JavaScript читает location.hash и вставляет через innerHTML без санитизации. Выполни произвольный JS и укради cookie администратора.

+30 XP
Python Pro
Exploit Fix
Обложка лабы: Reflected XSS в поиске магазина Обложка лабы: Reflected XSS в поиске магазина
XSS

Reflected XSS в поиске магазина

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

+30 XP
Python Pro
Exploit Fix
Обложка лабы: XSS через атрибут (javascript: URL) Обложка лабы: XSS через атрибут (javascript: URL)
XSS

XSS через атрибут (javascript: URL)

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

+60 XP
Python Pro
Exploit Fix
Обложка лабы: Stored XSS в комментариях к товарам Обложка лабы: Stored XSS в комментариях к товарам
XSS

Stored XSS в комментариях к товарам

Комментарии к товарам выводятся через |safe без санитизации. Укради сессию администратора через Stored XSS.

+60 XP
Python Pro
Exploit Fix