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

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

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

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Сложно+90 XP ~60 мин golang
CWE-22 · A01:2021 Pro
Обложка: Path Traversal через двойное URL-кодирование Обложка: Path Traversal через двойное URL-кодирование
Задача
# Path Traversal: обход нормализации через двойное URL-кодирование ## Сценарий Вы — внешний аудитор маркетплейса цифровых товаров **BitGood**. Покупатели скачивают купленные файлы — иконки, шрифты, шаблоны — по имени из самого адреса; от обхода каталогов команду защищает нормализация пути. Разработчик обработчика в отпуске, а на соседнем проекте недавно ловили обход через кодирование адреса, поэтому вас подключили проверить, не повторяется ли та же история здесь. ## Цель 1. Проследите цепочку обработки имени: сколько раз и на каких этапах выполняется декодирование и где стоит нормализация. 2. Сконструируйте имя, которое при проверке выглядит безобидной закодированной строкой, а раскрывается в обход каталогов уже после неё. 3. Прочитайте конфигурационный файл приложения за пределами каталога загрузок и извлеките флаг. ## Теория URL-кодирование заменяет специальные символы их безопасной записью с маркером-процентом; при разборе адреса сервер выполняет декодирование автоматически. Ключ к обходу в том, что закодировать можно и сам маркер: тогда после первого декодирования строка всё ещё остаётся закодированной и раскрывается лишь при повторном. Если обработчик декодирует имя второй раз вручную, а защитная нормализация стоит между двумя декодированиями, — проверка смотрит на строку, в которой опасной последовательности ещё «не существует». После проверки она появляется. **Уязвимый паттерн:** ```go cleaned := filepath.Clean(name) // строка всё ещё закодирована decoded, _ := url.PathUnescape(cleaned) fullPath := filepath.Join("downloads", decoded) ``` Механика атаки: опасная последовательность кодируется дважды. Первый уровень снимает сервер при разборе адреса — нормализатор видит безобидную закодированную строку и пропускает её. Второй уровень снимает сам обработчик уже после проверки — и путь внезапно «вырастает» вверх из каталога загрузок, ведя к файлам приложения. ## Точка входа атаки `GET /download/{name}` — имя файла передаётся прямо в адресе. Аутентификация не требуется. * **Обычный пользователь (для знакомства с приложением):** `demo` / `demo`

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

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

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

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

+60 XP
Go 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
Обложка лабы: Path Traversal (Чтение окружения) Обложка лабы: Path Traversal (Чтение окружения)
Path Traversal

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

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

+30 XP
Go Pro
Exploit Fix