Перейти к содержимому

Поиск по платформе

IDOR: Mass Assignment — эскалация привилегий через профиль

Эндпоинт обновления профиля принимает JSON и записывает все поля, включая role. Отправь {"role":"admin"} и получи доступ к админ-панели с флагом.

Автор: Hack & Fix
Освоишь: object-level authUUID вместо intownership check
Средне+60 XP ~30 мин golang
CWE-639 · A01:2021 Pro
Обложка: IDOR: Mass Assignment — эскалация привилегий через профиль Обложка: IDOR: Mass Assignment — эскалация привилегий через профиль
Задача
# IDOR: Mass Assignment — захват привилегий через профиль ## Сценарий **WaveGear** — магазин снаряжения для сёрфинга и кайтинга. Профиль пользователя редактируется через API: фронтенд отправляет на эндпоинт обновления JSON с полями формы, и команда уверена, что «схему запроса контролирует интерфейс». Основатель магазина Дима не верит, что обычный покупатель может стать администратором, — пока вы, подрядчик по безопасности, не покажете обратное. Флаг хранится в административной зоне магазина. ## Цель 1. Изучите запрос обновления профиля: какие поля отправляет интерфейс и как сервер их применяет. 2. Найдите способ передать эндпоинту данные сверх формы — поля, которых нет в интерфейсе, но которые сервер понимает и сохраняет. 3. Добейтесь административного доступа и извлеките флаг из админ-панели. ## Теория Mass Assignment (массовое присваивание) — уязвимость, при которой обработчик декодирует входное тело (JSON, form-data, XML) напрямую в доменную модель или ORM-сущность, не ограничивая набор допустимых полей. Если в модели есть чувствительные атрибуты — роль, баланс, статус, флаги привилегий, — атакующий добавляет их в запрос и перезаписывает, хотя в интерфейсе таких полей нет. Граница «что клиенту разрешено менять» исчезает: мерой становится структура внутренней модели, а не осознанный выбор разработчика. **Уязвимый паттерн:** ```go // Тело запроса декодируется напрямую в модель пользователя: var update models.User json.NewDecoder(r.Body).Decode(&update) db.Exec("UPDATE users SET ... WHERE id=?", ..., user.ID) ``` Атакующему не нужен обход аутентификации: он регистрируется штатно, выясняет структуру модели — по исходникам, клиентскому коду, сообщениям об ошибках или конвенциям имён — и отправляет запрос с дополнительным полем. Сервис применит его, потому что доверяет всей схеме входящих данных. ## Точка входа атаки | Параметр | Значение | |----------|----------| | Учётные данные | `demo` / `demo` | | Обновление профиля | `POST /profile/update` (JSON) | | Привилегированная зона | `GET /admin` |

Похожие лабораторные (4)

другие лабы по этой уязвимости
Обложка лабы: IDOR: Доступ к чужому счету Обложка лабы: IDOR: Доступ к чужому счету
IDOR

IDOR: Доступ к чужому счету

Эндпоинт просмотра счета не проверяет владельца. Получи флаг из счета другого пользователя.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: IDOR: Перебор заказов по последовательным ID Обложка лабы: IDOR: Перебор заказов по последовательным ID
IDOR

IDOR: Перебор заказов по последовательным ID

Заказы используют последовательные целочисленные ID. Эндпоинт /order/{id} не проверяет владельца — можно перебрать чужие заказы и найти флаг.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: IDOR: Вертикальная эскалация привилегий Обложка лабы: IDOR: Вертикальная эскалация привилегий
IDOR

IDOR: Вертикальная эскалация привилегий

Админ-эндпоинты /admin/stats и /admin/users/delete проверяют аутентификацию, но не авторизацию. Любой залогиненный пользователь может получить флаг.

+30 XP
Go Pro
Exploit Fix
Обложка лабы: IDOR: Predictable Order IDs Обложка лабы: IDOR: Predictable Order IDs
IDOR

IDOR: Predictable Order IDs

Заказы используют последовательные integer ID. Атакующий перебирает ID и просматривает чужие заказы.

+60 XP
PHP Pro
Exploit Fix