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

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

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

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

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

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

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

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

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

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

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

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

+30 XP
Python Pro
Exploit Fix
Обложка лабы: 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