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

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

Path Traversal: Normpath Bypass

Обработчик использует os.path.normpath() до конкатенации, что не предотвращает выход за пределы директории.

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Средне+60 XP ~30 мин python
CWE-22 · A01:2021 Pro
Обложка: Path Traversal: Normpath Bypass Обложка: Path Traversal: Normpath Bypass
Задача
# Обход пути (неполная нормализация имени) ## Сценарий Вы — пентестер, нанятый «СпортСити» — сетевым магазином спортивных товаров — перед миграцией витрины в новый дата-центр. В магазине есть эндпоинт скачивания изображений товаров, и разработчик, наслышанный о traversal, «защитил» его стандартной функцией нормализации пути. Тимлид не уверен, что защита работает, и просит проверить это на практике: миграция — удачный повод закрыть старые дыры. ## Цель 1. Найдите эндпоинт скачивания и проверьте, действительно ли нормализация имени файла блокирует переходы в родительские каталоги. 2. Прочитайте за пределами папки раздачи исходный код и служебные данные приложения — найдите учётные данные привилегированного аккаунта с достаточным балансом. 3. Войдите под этим аккаунтом и купите секретный товар «CTF Flag». 4. Заберите флаг со страницы профиля. ## Теория Нормализация пути упрощает его запись: схлопывает дублирующиеся разделители и упоминания текущего каталога. Но нормализация — не проверка границ: она возвращает канонический вид того же пути, не привязывая его к разрешённой директории. Если нормализовать ввод до склейки с базой, последовательности «на уровень вверх» переживают «защиту» и попадают в итоговый путь как есть. **Уязвимый паттерн:** ```python safe_name = os.path.normpath(filename) full_path = os.path.join(BASE_DIR, safe_name) ``` После склейки результат уже ничем не проверяется: путь выходит за пределы папки изображений — и дальше до любого файла сервера, включая исходный код приложения. ## Точка входа атаки `GET /download` — имя файла передаётся параметром запроса `file`. Для входа используйте `POST /login` с полями `username` и `password`. * **Обычный покупатель:** `demo` / `demo` * **Администратор:** `admin` / `???` — данные для входа ищите в ходе атаки

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

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

Path Traversal: Absolute Path

Обработчик скачивания файлов проверяет только '..' в пути, но не блокирует абсолютные пути. В Python os.path.join('/base', '/etc/passwd') возвращает '/etc/passwd' — второй аргумент абсолютный, base игнорируется.

+30 XP
Python Pro
Exploit Fix
Обложка лабы: Path Traversal: Базовый обход директорий Обложка лабы: Path Traversal: Базовый обход директорий
Path Traversal

Path Traversal: Базовый обход директорий

Классическая уязвимость Path Traversal через os.path.join() без проверки выхода за пределы базовой директории.

+30 XP
Python Pro
Exploit Fix
Обложка лабы: Path Traversal: /proc Leak Обложка лабы: Path Traversal: /proc Leak
Path Traversal

Path Traversal: /proc Leak

Обработчик скачивания файлов не блокирует /proc/self/environ — утечка секретов через переменные окружения.

+90 XP
Python Pro
Exploit Fix
Обложка лабы: Path Traversal (Иллюзия filepath.Clean) Обложка лабы: Path Traversal (Иллюзия filepath.Clean)
Path Traversal

Path Traversal (Иллюзия filepath.Clean)

Обход неумелого использования функции filepath.Clean.

+60 XP
Go Pro
Exploit Fix