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

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

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

Комментарии к товарам выводятся без экранирования — Stored XSS позволяет украсть cookie администратора.

Автор: Hack & Fix
Освоишь: CSP nonceoutput escapingtemplate autoescape
Средне+60 XP ~25 мин php
CWE-79 · A03:2021 Pro
Обложка: Stored XSS в комментариях к товару Обложка: Stored XSS в комментариях к товару
Задача
## Сценарий «Рыболовка» — интернет-магазин рыболовных снастей, где под каждым товаром покупатели оставляют отзывы. Модератор сообщества Олеся Таран обратилась к вам после серии жалоб: у нескольких покупателей, открывших страницу одного спиннинга, «сам собой» слетала сессия, а в паре отзывов виднелись обрывки странного кода. Олеся просит проверить, исполняется ли разметка из отзывов в браузерах покупателей и чем это грозит магазину. ## Цель 1. Оставьте отзыв с разметкой и подтвердите, что при открытии страницы товара она исполняется браузером, а не выводится текстом. 2. Разместите отзыв, который при исполнении отправляет cookie посетителя на ваш сервер приёма, и приведите бота-администратора на страницу товара через страницу отчёта. 3. Подмените свою сессию перехваченной, войдите в админ-раздел и заберите флаг. ## Теория Stored XSS отличается от отражённого тем, что вредоносная разметка сохраняется на сервере: однажды оставленный отзыв рендерится каждому посетителю страницы при обычном визите, без специальных ссылок. Текст отзыва кладётся в базу как есть и при выводе вставляется в страницу без преобразования спецсимволов — автор имени комментария экранируется, а сам текст нет. **Уязвимый паттерн:** ```php <?php // VULNERABILITY: Stored XSS — comment text output without htmlspecialchars() ?> <p class="comment-text"><?= $comment['text'] ?></p> ``` Механика атаки: в отзыв помещается элемент с обработчиком, срабатывающим при разборе страницы. Код сохраняется в базе и срабатывает в браузере каждого, кто откроет товар, — в сессии жертвы доступен её идентификатор, который можно отправить на подконтрольный атакующему приёмник. Осталось лишь привести на страницу жертву с правами администратора — например, через форму отчёта о подозрительном контенте. ## Точка входа атаки `POST /product/{id}/comment` — форма отзыва на странице товара, поле `text`. `GET /product/{id}` — страница товара со списком отзывов. `POST /report` — поле `url`: ссылка, которую проверит бот-администратор. * **Обычный пользователь:** `demo` / `demo` * **Администратор:** `admin` / `???`

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

другие лабы по этой уязвимости
Обложка лабы: XSS в HTML-атрибуте (Attribute Context) Обложка лабы: XSS в HTML-атрибуте (Attribute Context)
XSS

XSS в HTML-атрибуте (Attribute Context)

Пользовательский URL выводится в атрибуте href без валидации схемы — javascript: выполняется при клике.

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

DOM XSS через URL-фрагмент

JavaScript читает location.hash и вставляет значение через innerHTML — DOM XSS без участия сервера.

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: Reflected XSS в поиске товаров Обложка лабы: Reflected XSS в поиске товаров
XSS

Reflected XSS в поиске товаров

Поисковый запрос отображается на странице без экранирования, позволяя выполнить произвольный JavaScript в браузере жертвы.

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