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

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

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

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Легко+30 XP ~15 мин golang
CWE-22 · A01:2021 Pro
Обложка: Path Traversal через абсолютный путь Обложка: Path Traversal через абсолютный путь
Задача
# Path Traversal: обход фильтра абсолютным путём ## Сценарий Вы — аудитор платформы электронных архивов **KartoTech**. Публичная страница скачивания выдаёт документы по имени из параметра ссылки; после прошлогодней жалобы разработчик добавил проверку одной «опасной» последовательности в имени и считает вопрос закрытым. Ревьюер не согласен: значение по-прежнему уходит в файловую систему без привязки к разрешённому каталогу, и вас попросили показать, чего стоит эта проверка. ## Цель 1. Определите, какую именно проверку проходит имя файла и что конкретно она запрещает. 2. Найдите форму записи пути, которая проходит проверку, но выводит чтение за пределы разрешённого каталога. 3. Через виртуальную файловую систему процессов прочитайте переменные окружения приложения, найдите флаг и сдайте его значение. ## Теория Path Traversal возникает, когда приложение принимает путь от пользователя и не доказывает, что итоговый файл лежит внутри разрешённого дерева. Запрет отдельных строк такой границы не создаёт: файловая система понимает несколько форм записи пути, а проверка может учитывать только одну. Относительный переход к родительскому каталогу легко поймать подстрокой — но путь можно записать и от корня файловой системы: абсолютное имя не содержит «подозрительных» символов и при этом подменяет путь целиком, игнорируя любые представления разработчика о базовой директории. **Уязвимый паттерн:** ```go // Запрещена только последовательность выхода на уровень выше: if strings.Contains(name, "..") { http.Error(w, "Invalid path", 400); return } data, err := os.ReadFile(name) // путь открывается как есть ``` Механика атаки: чёрный список подстрок блокирует один способ записи, а файловая система принимает остальные. Абсолютный путь обходит проверку полностью — и открывает чтение любого файла процесса, включая служебные псевдофайлы, отражающие состояние ядра и самого приложения. ## Точка входа атаки `GET /download` — скачивание документа; имя файла передаётся параметром `name`. Аутентификация не требуется. * **Обычный пользователь (для знакомства с приложением):** `demo` / `demo`

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

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

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

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

+60 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