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

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

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

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Средне+60 XP ~30 мин nodejs
CWE-22 · A01:2021 Pro
Обложка: Path Traversal: Обход naive blacklist-фильтра в Express Обложка: Path Traversal: Обход naive blacklist-фильтра в Express
Задача
# Path Traversal: обход фильтра имён файлов ## Сценарий Магазин электроники **«Смарт-Витрина»** добавил мини-фичу: карточка товара отдаёт файл изображения по имени из параметра запроса, а сервер на Express читает его из каталога статики. Разработчик знает про path traversal и даже написал «очистку»: последовательность перехода вверх по дереву каталогов вырезается из имени. Ревьюер усомнился, что вырезание действительно защищает, — и передал вопрос вам. ## Цель 1. Убедитесь, что эндпоинт скачивания принимает имя файла из параметра запроса и корректно отдаёт легитимный файл. 2. Проверьте, как «очистка» обрабатывает имя с несколькими последовательностями перехода вверх — блокирует их или лишь ослабляет. 3. Через обход каталогов прочитайте окружение серверного процесса и извлеките флаг. ## Теория Path traversal возникает, когда имя файла от пользователя попадает в путь без жёсткой привязки к разрешённому каталогу. Попытка «вырезать опасные символы» — самая хрупкая защита из возможных: она проверяет вход, а не результат. **Уязвимый паттерн:** ```js function sanitiseFilename(name) { return name.replace('../', ''); // ровно одно вхождение, без повторной проверки } ``` Замена подстроки без глобального флага вырезает только первое вхождение последовательности: если их несколько, остаток доходит до склейки с базовым каталогом. Края имени после вырезания середины тоже могут снова сложиться в опасную последовательность. Функция сборки пути нормализует оставшиеся сегменты перехода — итоговый путь выходит за пределы каталога статики, и процесс отдаёт атакующему произвольные доступные ему файлы. ## Точка входа атаки `GET /download` — параметр `file` (имя файла изображения из каталога статики). * **Обычный пользователь (для знакомства с магазином):** `demo` / `demo`

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

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

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

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

+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