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

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

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

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Средне+60 XP ~30 мин golang
CWE-22 · A01:2021 Pro
Обложка: Path Traversal (Иллюзия filepath.Clean) Обложка: Path Traversal (Иллюзия filepath.Clean)
Задача
# Path Traversal: обход нормализации пути ## Сценарий Вы — пентестер сервиса **SecureFiles**: дизайн-студия раздаёт клиентам макеты и шрифты по ссылкам, а имя файла берётся из параметра запроса. После прошлого инцидента команда добавила «защиту» — нормализацию пользовательского имени штатной функцией стандартной библиотеки — и уверена, что обход каталогов теперь невозможен. Тимлид просит вас проверить это утверждение до встречи с заказчиком: ему кажется, что проверка выполняется не в том месте. ## Цель 1. Разберитесь, в каком порядке применяются нормализация имени и присоединение к базовой директории. 2. Постройте имя, которое переживает нормализацию без изменений и выводит итоговый путь за пределы базовой директории. 3. Прочитайте файл с флагом за пределами разрешённого каталога и сдайте значение. ## Теория Распространённое заблуждение: вызвать функцию нормализации пути — и считать защиту готовой. Но нормализация решает другую задачу: она схлопывает избыточные сегменты внутри пути (текущий каталог, лишние разделители, разрешимые внутренние подъёмы). Ведущие сегменты подъёма на уровень вверх она не трогает — это синтаксически корректный относительный путь. Если нормализуется только пользовательский фрагмент, а не итоговый путь, граница каталога не возникает вовсе: при открытии файла операционная система разрешает подъёмы относительно уже базовой директории. **Уязвимый паттерн:** ```go safeFileName := filepath.Clean(fileName) filePath := ImgBasePath + "/" + safeFileName file, err := os.Open(filePath) ``` Механика атаки: имя, начинающееся с подъёмов на уровень вверх, остаётся собой после нормализации; склейка приклеивает его к базовой директории, и операционная система послушно поднимается выше базы. «Защита» не меняет ровным счётом ничего — работает классический обход каталогов. ## Точка входа атаки `GET /download` — скачивание файла; имя передаётся параметром `file`. Аутентификация не требуется. * **Обычный пользователь (для знакомства с приложением):** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: 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
Обложка лабы: Path Traversal (Чтение окружения) Обложка лабы: Path Traversal (Чтение окружения)
Path Traversal

Path Traversal (Чтение окружения)

Выход из каталога изображений и чтение окружения процесса через procfs.

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