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

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

Path Traversal: Absolute Path

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Легко+30 XP ~15 мин python
CWE-22 · A01:2021 Pro
Обложка: Path Traversal: Absolute Path Обложка: Path Traversal: Absolute Path
Задача
# Обход пути через абсолютное имя файла (Path Traversal) ## Сценарий Вы — участник приватного багбаунти магазина автозапчастей «МоторЛавка». Эндпоинт скачивания изображений деталей принимает имя файла и отдаёт содержимое из папки изображений. Разработчик уже знает про обход пути и поставил фильтр, отсекающий типичную traversal-последовательность, — и считает задачу решённой. Программа багбаунти платит за чтение файлов вне папки раздачи; проверьте, действительно ли фильтр закрыл весь класс уязвимости. ## Цель 1. Найдите эндпоинт скачивания и убедитесь, что относительный переход в родительский каталог блокируется. 2. Найдите форму имени файла, при которой фильтр пропускает запрос, а построение пути всё равно выходит за пределы папки изображений. 3. Прочитайте конфигурационный файл приложения в его корневой директории и получите флаг. ## Теория Чёрные списки в защите от обхода пути принципиально неполны: они закрывают известные приёмы, оставляя незамеченными остальные. Здесь фильтр отвергает последовательности «на уровень вверх», но итоговый путь строится функцией склейки сегментов, у которой есть коварное свойство: если присоединяемый аргумент — абсолютный путь, база отбрасывается, и итогом становится сам аргумент. Привязка к базе работает только для относительных имён. **Уязвимый паттерн:** ```python filepath = os.path.join(IMG_BASE_PATH, name) ``` Перед склейкой стоит проверка, отвергающая переходы вверх, но абсолютное имя она не считает опасным — а функция склейки в этом случае молча заменяет базовую директорию целиком. ## Точка входа атаки `GET /download` — имя файла передаётся параметром запроса `name`. Для входа в магазин используйте `POST /login` с полями `username` и `password`. * **Обычный покупатель:** `demo` / `demo`

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

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

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

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

+30 XP
Python Pro
Exploit Fix
Обложка лабы: Path Traversal: Normpath Bypass Обложка лабы: Path Traversal: Normpath Bypass
Path Traversal

Path Traversal: Normpath Bypass

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

+60 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 через абсолютный путь Обложка лабы: Path Traversal через абсолютный путь
Path Traversal

Path Traversal через абсолютный путь

Обработчик скачивания файлов проверяет только '..' в пути, но не блокирует абсолютные пути (/etc/passwd, /.env). Атакующий может читать любой файл на сервере.

+30 XP
Go Pro
Exploit Fix