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

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

Path Traversal (Базовый)

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Легко+30 XP ~15 мин golang
CWE-22 · A01:2021 Pro
Обложка: Path Traversal (Базовый) Обложка: Path Traversal (Базовый)
Задача
# Path Traversal: чтение произвольных файлов через скачивание ## Сценарий Вы — аудитор игрового магазина **PixelHarbor**. Маркетинговый раздел раздаёт клиентам промо-материалы: баннеры, листовки, арты — имя файла передаётся параметром ссылки, а сервер собирает полный путь к диску. В код-ревью коллега уже указывал разработчику на небезопасную склейку пути, но исправление отложили «до следующего спринта», а рассылка со ссылкой на раздел тем временем ушла подписчикам. Вам поручено проверить, чем это грозит. ## Цель 1. Изучите эндпоинт скачивания: параметр с именем файла проходит какую-либо проверку перед открытием файла? 2. Сконструируйте имя, которое выводит итоговый путь за пределы базовой директории, и подтвердите чтение файла вне её. 3. Прочитайте специально размещённый файл с флагом и сдайте его значение. ## Теория Path Traversal — атака, при которой пользователь манипулирует именем файла, чтобы выйти за границы предусмотренной директории. В файловых иерархиях есть последовательность, поднимающая путь на уровень вверх; повторяя её, атакующий добирается до корня файловой системы и далее указывает любой путь. Если приложение склеивает базовый каталог и пользовательское имя строкой, не проверяя результат, сервер открывает то, что получилось, — и отдаёт содержимое любого файла, доступного процессу: конфигурацию, секреты, служебные данные системы. **Уязвимый паттерн:** ```go fileName := r.URL.Query().Get("file") filePath := ImgBasePath + "/" + fileName 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 (Чтение окружения)

Выход из каталога изображений и чтение окружения процесса через 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