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

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

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

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Сложно+90 XP ~60 мин php
CWE-22 · A01:2021 Pro
Обложка: Path Traversal через обход нормализации пути Обложка: Path Traversal через обход нормализации пути
Задача
# Path Traversal (обход однопроходной фильтрации) ## Сценарий **ArtKiosk** — маркетплейс цифровых превью: иллюстрации, обложки, иконки. Файлы раздаются эндпоинтом скачивания — клиент передаёт имя файла, сервер читает его из каталога графики и отдаёт содержимое. Разработчик маркетплейса знал об угрозе обхода каталогов и написал «санитайзер»: перед использованием имя файла прогоняется через однопроходную замену, вырезающую служебные последовательности переходов вверх. Автотест на наивный traversal зелёный, код выведен в прод. Службу безопасности площадки смущает, что фильтр проверен против одного конкретного вида ввода, — вас пригласили доказать или опровергнуть его надёжность. ## Цель 1. Изучите эндпоинт скачивания и определите, какая фильтрация применяется к имени файла перед чтением. 2. Постройте ввод, который переживает однопроходную замену: после вырезания запрещённых последовательностей из остатка символов снова собирается переход в родительский каталог. 3. Подберите число повторов конструкции по реакции сервера и подтвердите чтение вне базовой директории на безопасной системной цели. 4. Прочитайте файл с флагом лабораторной работы во временной директории операционной системы и сдайте значение. ## Теория Замена подстрок в PHP выполняет ровно один проход по строке и не перепроверяет результат. Если запрещённая последовательность вложена в более длинную конструкцию так, что её удаление смыкает соседние символы в новую копию той же последовательности, фильтр возвращает строку, всё ещё содержащую переход вверх. Это общий порок санитайзеров: они угадывают и вырезают «плохие» фрагменты вместо проверки итогового пути. **Уязвимый паттерн:** ```php $cleaned = str_replace(['../', '..\\'], '', $file); $baseDir = __DIR__ . '/../../static/img'; $filePath = $baseDir . '/' . $cleaned; readfile($filePath); ``` Фильтр вырезает литеральные последовательности переходов ровно один раз, после чего «очищенное» имя склеивается с базовой директорией. Ввод, в котором вокруг вырезаемого фрагмента стоят подходящие символы, после замены смыкается в новый переход вверх — итоговый путь выходит за пределы каталога графики. Повторяя сконструированный блок нужное число раз, атакующий поднимается на любую глубину дерева: избыточные переходы вверх ядро операционной системы срезает до корня. ## Точка входа атаки `GET /download?file=<имя_файла>` — публичный эндпоинт скачивания; аутентификация не требуется. Каталог доступных файлов перечислен на странице `/downloads`. * **Обычный пользователь (для навигации по маркетплейсу):** `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 в загрузке файлов

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

+30 XP
PHP Pro
Exploit Fix
Обложка лабы: Path Traversal через двойное URL-кодирование Обложка лабы: Path Traversal через двойное URL-кодирование
Path Traversal

Path Traversal через двойное URL-кодирование

Обработчик скачивания файлов применяет filepath.Clean ДО URL-декодирования. Двойное кодирование (%252e%252e%252f) обходит проверку и позволяет читать произвольные файлы.

+90 XP
Go 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