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

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

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

Комментарии к товарам хранятся без санитаризации и отображаются как HTML. Укради сессию администратора.

Автор: Hack & Fix
Освоишь: CSP nonceoutput escapingtemplate autoescape
Средне+60 XP ~25 мин golang
CWE-79 · A03:2021 Pro
Обложка: Stored XSS в комментариях к товарам Обложка: Stored XSS в комментариях к товарам
Задача
## Сценарий Вы аудируете магазин аудиотехники **EchoMarket** перед запуском публичных обсуждений товаров. Техподдержка уже получала жалобы на «странно выглядящие» комментарии, и команда спешно проверяет механизм. Оказалось, что ради красивого форматирования — жирного текста и ссылок — текст комментария выводится как «доверенная разметка», в обход штатного экранирования шаблонизатора. Каждый, кто откроет страницу товара, получит исполнение чужого кода в своей сессии. Страницы товаров по жалобам открывает и бот-администратор. ## Цель 1. Сохраните в комментарии к товару код, который передаёт куки сессии открывшего страницу на ваш Exploit Server. 2. Убедитесь, что сохранённый код срабатывает у каждого посетителя страницы товара. 3. Через форму жалоб отправьте боту-администратору ссылку на эту страницу. 4. Перехваченной сессией войдите в панель администратора и заберите флаг. ## Теория Stored XSS — атака, при которой вредоносная разметка один раз сохраняется на сервере и затем исполняется в браузере каждого посетителя страницы. В отличие от отражённой инъекции, жертве не нужна специально подготовленная ссылка с данными — достаточно открыть «заряжённую» страницу. Go-шаблонизатор по умолчанию экранирует всё, что подставляется в страницу. Чтобы получить хранимую инъекцию, защиту снимают вручную: регистрируют функцию, которая помечает строку как уже безопасную разметку. **Уязвимый паттерн:** ```go "safeHTML": func(s string) template.HTML { return template.HTML(s) }, ``` Шаблон страницы товара выводит текст комментария через эту функцию, и шаблонизатор пропускает значение без обработки. Разметка и обработчики событий из комментария попадают в страницу как есть и исполняются в сессии каждого читателя — включая администратора, пришедшего по жалобе. ## Точка входа атаки `POST /product/{id}/comment` — форма комментария (параметр `text`); результат отображается на `GET /product/{id}`. * **Аккаунт атакующего:** `demo` / `demo` * **Доставка боту:** `POST /report` — бот откроет ссылку на страницу товара * **Цель:** `GET /admin` — панель администратора с флагом * **Exploit Server:** адрес из панели лабы для приёма перехваченных данных

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

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

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

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: DOM XSS через URL-фрагмент (location.hash) Обложка лабы: DOM XSS через URL-фрагмент (location.hash)
XSS

DOM XSS через URL-фрагмент (location.hash)

JavaScript на странице каталога читает location.hash и вставляет его в DOM через innerHTML. Укради сессию администратора.

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

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

Поисковый запрос отражается в HTML без экранирования. Выполни произвольный JS в контексте магазина.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: XSS при слабой CSP (unsafe-inline) Обложка лабы: XSS при слабой CSP (unsafe-inline)
XSS

XSS при слабой CSP (unsafe-inline)

Reflected XSS эксплуатируется благодаря CSP с 'unsafe-inline'. Исправление требует nonce-based CSP.

+90 XP
Go Pro
Exploit Fix