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

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

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

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