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

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

Path Traversal в загрузке файлов

Обход пути через параметр file в эндпоинте загрузки файлов (PHP).

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Легко+30 XP ~15 мин php
CWE-22 · A01:2021 Pro
Обложка: Path Traversal в загрузке файлов Обложка: Path Traversal в загрузке файлов
Задача
# Path Traversal (чтение файлов вне разрешённого каталога) ## Сценарий Вы — пентестер, приглашённый на аудит **DevMerch** — небольшого магазина мерча для разработчиков: футболки с принтами, стикеры, значки. Каталог работает на самописном PHP, и вся графика товаров раздаётся отдельным эндпоинтом: клиент передаёт имя файла, сервер находит его в публичном каталоге изображений и отдаёт содержимое. Команда разработки уверена, что эндпоинт безобиден — он «всего лишь читает картинки». На прошлой неделе внешний сканер отметил подозрительную гибкость этого эндпоинта, и вам поручили проверить его вручную. ## Цель 1. Изучите эндпоинт раздачи изображений на легитимном запросе и определите, как сервер строит итоговый путь к файлу. 2. Подтвердите Path Traversal на безопасной цели — стандартном системном файле с предсказуемым содержимым. 3. Прочитайте файл с флагом лабораторной работы, созданный при старте контейнера, и сдайте его значение. ## Теория Path Traversal (Directory Traversal, CWE-22) — атака, при которой пользователь манипулирует именем файла, чтобы выйти за границы предусмотренной директории. Базовый вектор — обход каталогов через последовательность переходов вверх: каждый такой сегмент поднимает итоговый путь на уровень по дереву каталогов. Если приложение склеивает базовую директорию с пользовательским вводом и не проверяет результат, атакующий читает любые файлы, доступные процессу веб-сервера. **Уязвимый паттерн:** ```php $filePath = __DIR__ . '/../../static/img/' . $file; readfile($filePath); ``` Имя файла из запроса напрямую конкатенируется с базовой директорией. Функции файловой системы PHP не проверяют границы: они открывают тот путь, который им передали. Канонизация и проверка «остался ли итоговый путь внутри базовой директории» — отдельная операция, и в этом коде её нет. Точная глубина базовой директории атакующему даже не нужна: избыточные переходы вверх ядро операционной системы срезает до корня файловой системы. ## Точка входа атаки `GET /download?file=<имя_файла>` — публичный эндпоинт раздачи изображений товаров; аутентификация не требуется. Легитимный пример: `?file=hoodie.svg`. * **Обычный пользователь (для навигации по магазину):** `demo` / `demo`

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

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

Path Traversal: абсолютные пути обходят blacklist

Сервер фильтрует '..' в запросах на скачивание, но не проверяет абсолютные пути — можно читать любой файл системы.

+60 XP
PHP Pro
Exploit Fix
Обложка лабы: Path Traversal через обход нормализации пути Обложка лабы: Path Traversal через обход нормализации пути
Path Traversal

Path Traversal через обход нормализации пути

Нормализация пути применяется ДО конкатенации с базовым каталогом — traversal-последовательности сохраняются после Clean, позволяя читать произвольные файлы.

+90 XP
PHP Pro
Exploit Fix
Обложка лабы: Path Traversal через абсолютный путь Обложка лабы: Path Traversal через абсолютный путь
Path Traversal

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

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

+30 XP
Go Pro
Exploit Fix
Обложка лабы: Path Traversal (Базовый) Обложка лабы: Path Traversal (Базовый)
Path Traversal

Path Traversal (Базовый)

Классическая уязвимость Path Traversal через os.Open.

+30 XP
Go Pro
Exploit Fix