На странице
Многошаговый процесс без контроля доступа на одном из шагов
Лаборатория
Multi-step process with no access control on one step · Apprentice
Решение
Дано
This lab has an admin panel with a flawed multi-step process for changing a user's role. You can familiarize yourself with the admin panel by logging in using the credentials administrator:admin.
To solve the lab, log in using the credentials wiener:peter and exploit the flawed access controls to promote yourself to become an administrator.
Анализ задания
Есть админка, в которой есть уязвимость в процессе смены роли пользователя. Нам нужно посмотреть, как устроена админка (дали креды). И, зайдя под пользователем wiener, эксплуатировать уязвимость и повысить свои права до административных.
Разведка
Посмотрим админку. Есть селектор пользователей, выбранного можно сделать админом. Также можно убрать из админов.
Мы выбрали пользователя, нажали сделать админом:
POST /admin-roles
username=carlos&action=upgrade
В ответ получили HTML — страница подтверждения действия. Если нажимаем «Подтвердить»:
POST /admin-roles
action=upgrade&confirmed=true&username=carlos
Как видим, здесь добавляется параметр confirmed=true. Как мне кажется, как раз этот второй запрос и уязвим. Но проверим оба шага.
Залогинимся под wiener и попробуем вызвать POST /admin-roles без параметра confirmed, а потом с ним. 2 варианта нагрузки:
POST /admin-roles
action=upgrade&username=wiener
POST /admin-roles
action=upgrade&confirmed=true&username=wiener
Первая нагрузка — «Unauthorized». Вторая — успех.
Лаба решена.
Ещё в этой категории
Эксплуатация небезопасной десериализации через функции приложения (PortSwigger Lab)
Подмена поля `avatar_link` в объекте сессии для удаления произвольного файла через функцию удаления аккаунта.
Изменение типов сериализованных данных (PortSwigger Lab)
Эксплуатируем нестрогое сравнение PHP, меняя тип `access_token` на целое `0` и обходя аутентификацию.
Изменение сериализованных объектов (PortSwigger Lab)
Меняем булево поле `admin` в PHP-сериализованной куке сессии и получаем права администратора.