На странице
Базовое отравление сброса пароля
Лаборатория
Basic password reset poisoning · Practitioner
Решение
Дано
This lab is vulnerable to password reset poisoning. The user `carlos` will carelessly click on any links in emails that he receives. To solve the lab, log in to Carlos's account.
You can log in to your own account using the following credentials: `wiener:peter`. Any emails sent to this account can be read via the email client on the exploit server.
Анализ задания
У PortSwigger есть отдельная заметка «Password reset poisoning». И ещё цикл про «HTTP Host Header attacks». Веб-приложение не знает адрес, на котором оно находится, и поэтому приходится использовать заголовок Host, когда нужно, например, сгенерировать полный URL до сервера. Это актуально как раз для функции сброса пароля, где отправляется ресет-ссылка.
Разведка
Посмотрим запрос на восстановление пароля и попробуем манипулировать заголовком Host.
Отправим запрос на восстановление для своего пользователя.
Теперь отправим ещё раз, но заменим заголовок Host на адрес нашего эксплойт-сервера:
exploit-0a1a00a804fbe14180d3d4d001e100bf.exploit-server.net
Оба запроса прошли — 200. Посмотрим письма:
- Первое — со ссылкой на адрес уязвимого сайта
- Второе — ссылка на адрес нашего эксплойт-сервера
Ок, теперь для отправки письма пользователю carlos заменим поле username на carlos и отправим запрос. Идём смотреть логи доступа.
Вот и запрос от жертвы:
/forgot-password?temp-forgot-password-token=3lc3xbctomlakufr3oftagyorpysgvwo
Переходим по ссылке, задаём любой пароль. Далее логинимся.
Лаба решена!
Ещё в этой категории
Внедрение произвольного объекта в PHP (PortSwigger Lab)
Восстановление утёкшего исходного кода и внедрение сериализованного объекта CustomTemplate, чей __destruct удаляет произвольный файл.
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.