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

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

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

mediumpythonPro
Задача
# Stored XSS: комментарии к товарам ## Сценарий Перед вами Flask-приложение интернет-магазина SecureShop. На странице каждого товара есть форма комментариев: любой авторизованный пользователь может оставить отзыв, который сохраняется в базе и потом отображается на странице того же товара всем посетителям. То есть значение поля комментария — это **stored**-данные: они переживают одну сессию атакующего и видны другим пользователям при следующих визитах. При отображении сохранённых комментариев приложение вставляет их текст в HTML-вывод **без экранирования специальных символов HTML**. Это превращает форму комментария в полноценный канал Stored XSS: введённая один раз HTML-разметка (включая исполняемые теги вида `<script>`, `<img onerror=..>`, `<svg onload=..>`) сохраняется в БД и далее автоматически исполняется в браузере **каждого** пользователя, открывающего страницу этого товара. В приложении есть отдельная служебная форма «Report to Admin», через которую обычный пользователь может пожаловаться администратору и приложить ссылку. Бот-администратор открывает присланную ссылку в собственном авторизованном браузере. Соединив stored-XSS на странице товара с этой формой, обычный пользователь получает прямой канал доставки JavaScript в браузер админа: оставить вредоносный комментарий на товаре, отправить ссылку на страницу этого товара через Report, и через полученный XSS перехватить сессионную идентификацию администратора. Дальше — на админский раздел `/admin`, где приложение и отдаёт CTF-флаг. ## Цели 1. Найдите форму комментариев и подтвердите, что HTML-разметка из текста комментария **исполняется** при отображении страницы (а не выводится как текст). 2. Сконструируйте комментарий, исполнение которого в браузере жертвы доставит её сессионный идентификатор на ваш Exploit Server. 3. Доставьте администратора на страницу с таким комментарием через форму отчёта; перехватите его сессию; войдите от его имени на админский раздел и заберите CTF-флаг. ## Данные | Параметр | Значение | |----------|----------| | Обычный пользователь | `demo` / `demo` | | Exploit Server | ссылка «Exploit Server» на панели лабы |
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru