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

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

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

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

Автор: Hack & Fix
Освоишь: filepath.Cleanchroot-подобиеbasename-фильтр
Легко+30 XP ~15 мин nodejs
CWE-22 · A01:2021 Pro
Обложка: Path Traversal: Базовый обход директорий в Express Обложка: Path Traversal: Базовый обход директорий в Express
Задача
# Path Traversal: чтение файлов вне базовой директории ## Сценарий Магазин постеров и принтов **PosterPit** отдаёт изображения товаров отдельным эндпоинтом скачивания: клиент называет имя файла, сервер ищет его в каталоге картинок и возвращает содержимое. Разработчик считал, что раз имя всегда берётся из ссылок каталога, «ничего страшного в нём быть не может». Приглашённый аудитор не согласен: параметр запроса контролирует клиент. В служебном каталоге рядом с картинками лежит файл, который магазину точно не нужно показывать покупателям, — доберитесь до него. ## Цель 1. Войдите покупателем и найдите эндпоинт скачивания: как он принимает имя файла и что отдаёт. 2. Проверьте, ограничивает ли сервер итоговый путь рамками каталога изображений. 3. Сформируйте имя, выводящее путь в соседний служебный каталог, и прочитайте файл с флагом. ## Теория Path Traversal возникает, когда путь к файлу строится склейкой базового каталога с пользовательским вводом без последующей проверки границ. Функции склейки путей послушно нормализуют сегменты перехода в родительский каталог, но не запрещают результату покидать базу. **Уязвимый паттерн:** ```js const filepath = path.join(IMG_BASE_PATH, filename); data = fs.readFileSync(filepath); ``` Итоговый путь передаётся в чтение файла как есть: если в имени достаточно переходов вверх по дереву, сервер прочитает файл за пределами каталога изображений — любой, к которому у процесса есть доступ. ## Точка входа атаки `GET /download?file=<имя>` — эндпоинт скачивания изображения; параметр `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: Обход 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 через абсолютный путь Обложка лабы: 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