Vertical IDOR: Доступ к админ-панели без проверки роли
Admin-эндпоинты /admin/stats и /admin/users/delete защищены только аутентификацией, но не авторизацией. Обычный пользователь может выполнять действия администратора.
hardphpPro
Задача
# Vertical IDOR: Доступ к админ-панели без проверки роли
## Сценарий
Перед вами интернет-магазин SecureShop. В приложении есть административная панель с несколькими разделами — управление пользователями, статистика магазина, действия над учётными записями. Эти страницы должны быть доступны только пользователям с ролью администратора, и **на первый взгляд** они закрыты для обычного пользователя — никаких ссылок на админку в навигации обычного аккаунта нет.
В реальности же закрыт только один уровень контроля доступа — **аутентификация** (вошёл ли пользователь в систему). Второй, более важный для администраторских функций уровень — **авторизация** (имеет ли вошедший пользователь право на эту конкретную операцию) — реализован не везде. Это классическая вертикальная эскалация привилегий из категории Broken Access Control (OWASP A01:2021, CWE-862 Missing Authorization).
Разработчик добавил проверку `if ($user === null)` в каждый административный обработчик и посчитал, что этого достаточно. Сервер доверяет факту наличия валидной сессии и не проверяет роль пользователя дальше. Это типовая ошибка: «обычные пользователи не знают URL администратора, значит, они туда не попадут» — Security through Obscurity, которая не является защитой.
В одном из административных разделов отображается секретный admin-токен — CTF-флаг. Ваша задача — найти, какие именно административные эндпоинты не проверяют роль, и через них получить флаг под учётной записью обычного пользователя.
## Цели
1. Авторизуйтесь как `demo` / `demo` и осмотрите доступный для обычного пользователя функционал.
2. Эмпирически проверьте, какие административные пути приложения отвергают обычного пользователя, а какие — нет. Конвенциональные пути для админки: `/admin`, `/dashboard`, `/manage`, или просто перебор по типичным шаблонам.
3. Через найденный канал доберитесь до раздела с CTF-флагом и получите его значение.
4. Дополнительно: продемонстрируйте, что обычный пользователь может выполнять не только чтение, но и изменяющие операции администратора.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |
| Тип уязвимости | Vertical IDOR / Broken Access Control |
| Класс OWASP | A01:2021 Broken Access Control |
| CWE | CWE-862 Missing Authorization |