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

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

Path Traversal: чтение произвольных файлов через абсолютный путь

Эндпоинт скачивания изображений склеивает имя файла с базовой директорией через path.resolve. Из-за поведения path.resolve абсолютный аргумент отбрасывает базовый путь — атакующий читает любой файл сервера.

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Средне+60 XP ~30 мин nodejs
CWE-22 · A01:2021 Pro
Обложка: Path Traversal: чтение произвольных файлов через абсолютный путь Обложка: Path Traversal: чтение произвольных файлов через абсолютный путь
Задача
# Path Traversal: абсолютный путь ## Сценарий Галерея цифрового искусства **PixelHive** уже пережила один инцидент с чтением чужих файлов и починила эндпоинт скачивания: теперь имена с переходами в родительский каталог отвергаются фильтром. Куратор галереи успокоился, но внешний ревьюэр утверждает, что фильтр закрывает лишь один из способов выйти за пределы каталога изображений: поведение функций построения путей в Node.js содержит исключение, о котором часто забывают. Файл с флагом лежит в файловой системе сервера вне дерева приложения — прочитайте его. ## Цель 1. Найдите эндпоинт скачивания и убедитесь, что переходы в родительский каталог действительно блокируются фильтром. 2. Найдите форму имени файла, которая проходит фильтр, но заставляет сервер читать файл вне каталога изображений. 3. Прочитайте через абсолютный путь файл с флагом и получите его значение. ## Теория Функции построения путей принимают базовый каталог и присоединяемые части, но ведут себя неинтуитивно: если очередная часть сама является абсолютным путём — начинается с корневого разделителя, — все предыдущие части отбрасываются, и итогом становится эта часть. **Уязвимый паттерн:** ```js if (name.indexOf('..') !== -1) { // фильтр ловит только переходы return res.status(400).send('Invalid path: .. not allowed'); } const filepath = path.resolve(IMG_BASE_PATH, name); ``` Фильтр проверяет единственную «опасную» подстроку, а абсолютный путь её не содержит — и молча заменяет собой базовый каталог. Чёрный список конкретных конструкций всегда уже множества способов обойти границы. ## Точка входа атаки `GET /download?name=<имя>` — эндпоинт скачивания изображения; параметр `name` принимает имя файла из каталога изображений. * **Пользователь:** `demo` / `demo`

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

другие лабы по этой уязвимости
Обложка лабы: Path Traversal: Обход naive blacklist-фильтра в Express Обложка лабы: Path Traversal: Обход naive blacklist-фильтра в Express
Path Traversal

Path Traversal: Обход naive blacklist-фильтра в Express

Эндпоинт скачивания файлов фильтрует путь через replace('../', '') без флага /g — фильтр срабатывает только один раз, и любая цепочка ../../../ обходит его.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: Path Traversal: Базовый обход директорий в Express Обложка лабы: Path Traversal: Базовый обход директорий в Express
Path Traversal

Path Traversal: Базовый обход директорий в Express

Классическая Path Traversal в Express через fs.readFileSync(path.join(base, userInput)) без проверки выхода за пределы базовой директории.

+30 XP
Node.js 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: абсолютные пути обходят blacklist Обложка лабы: Path Traversal: абсолютные пути обходят blacklist
Path Traversal

Path Traversal: абсолютные пути обходят blacklist

Сервер фильтрует '..' в запросах на скачивание, но не проверяет абсолютные пути — можно читать любой файл системы.

+60 XP
PHP Pro
Exploit Fix