Перейти к содержимому
← Каталог golang Path Traversal

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

Атака на инфраструктуру через /proc/self/environ.

easygolangPro
Задача
# Path Traversal: чтение секретов через виртуальную файловую систему ## Сценарий Вы аудируете внутренний сервис **SecureDocs**, в котором есть эндпоинт скачивания статических файлов. Просматривая исходный код, вы обнаруживаете, что обработчик принимает имя файла из параметра запроса и открывает его без какой-либо валидации пути — базовая директория и пользовательский ввод склеиваются напрямую. Команда не задумывается о том, что в Linux есть виртуальные файловые системы, через которые можно читать не только обычные файлы, но и runtime-состояние процесса. ## Цель 1. Подтвердите path traversal через эндпоинт скачивания и определите глубину базовой директории относительно корня. 2. Используйте знание архитектуры Linux, чтобы добраться до runtime-состояния процесса приложения через виртуальную файловую систему. 3. Извлеките значение переменной окружения `LAB_FLAG` и получите флаг. ## Теория Path Traversal в его «чистом виде» — это конкатенация пользовательского ввода с базовым путём без проверки итоговой принадлежности файла к разрешённой директории. Атакующий использует восходящие сегменты `../` для выхода в корень и затем спускается к произвольному файлу. В Linux атака усиливается виртуальной файловой системой `/proc`: она экспортирует runtime-состояние каждого процесса (переменные окружения, аргументы запуска, открытые дескрипторы, карта памяти) как обычные файлы — и через любой path traversal они становятся доступны для чтения тем же кодом, что читает «обычный» файл с диска. **Уязвимый паттерн:** ```go // Базовый путь и пользовательский ввод склеиваются напрямую fullPath := basePath + "/" + userInput file, _ := os.Open(fullPath) ``` Содержимое `/proc/self/environ` хранит все переменные окружения процесса, разделённые нулевым байтом — включая секреты, API-ключи, пароли БД и значения, переданные через `docker run -e` / Kubernetes manifest. Файл существует только во время жизни процесса, но read-доступ к нему даёт мгновенный exfil-канал для любых in-process secrets. ## Точка входа атаки `GET /download?file=<имя файла>` — параметр `file` принимает имя файла и возвращает его содержимое. * **Цель:** добраться до runtime-состояния текущего процесса приложения и извлечь значение переменной `LAB_FLAG` из окружения.
🚧 Сайт в разработке. Полный функционал пока недоступен. Все вопросы — support@hackandfix.ru