Access Control: Forced Browsing — открытая админ-панель
Административные страницы доступны без аутентификации. Перейдите напрямую и получите конфиденциальные данные.
easypythonPro
Задача
# Forced Browsing: административный раздел без проверки доступа
## Сценарий
Перед вами Flask-приложение интернет-магазина SecureShop. У приложения есть служебный административный раздел — страницы управления и системной статистики. Ссылки на эти страницы **скрыты из навигации** для обычных пользователей: разработчик решил, что «если ссылку не видно — туда никто не зайдёт», и не реализовал серверной проверки доступа на самих страницах.
Это типовая ошибка мышления в области авторизации: путают «недоступность» с «незаметностью». На уровне HTTP это разные вещи: незаметная страница — это всего лишь страница, на которую нет ссылки; чтобы быть **недоступной**, она должна на серверной стороне явно отвергать запросы от неавторизованных пользователей. Никакого «security through obscurity» в реальной модели угроз не существует: список админских URL легко угадывается по типичным конвенциям (`/admin`, `/admin/dashboard`, `/manage`, и т.п.), на ходу собирается из реакций сервера на серию запросов, или находится в любых утечках вроде `/robots.txt`, JS-бандлов, скриншотов, документации.
В одном из таких «скрытых» административных разделов отображается системная статистика; среди показателей в этой статистике есть значение CTF-флага.
## Цели
1. Не входя в систему, попробуйте обратиться напрямую к административным URL по типичной для административных разделов конвенции. Подтвердите, что сервер **возвращает страницу**, а не 401/403.
2. Изучите доступные административные подразделы; найдите тот, в котором отображается системная статистика.
3. Извлеките значение CTF-флага из раздела статистики и сдайте его.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |