Path Traversal: Базовый обход директорий
Классическая уязвимость Path Traversal через os.path.join() без проверки выхода за пределы базовой директории.
easypythonPro
Задача
# Path Traversal: чтение файлов за пределами разрешённой директории
## Сценарий
Перед вами Flask-приложение интернет-магазина SecureShop. Команда разработки реализовала эндпоинт скачивания изображений товаров — клиент передаёт имя файла, сервер находит его в директории со статикой и отдаёт содержимое.
Реализация такой функции выглядит безобидно, но требует строгой проверки: то, что сервер возьмёт из присланного клиентом «имени», должно гарантированно остаться внутри разрешённой публичной директории. В этой реализации проверка пропущена. Любая последовательность, выводящая интерпретатор пути за границы базовой директории, проходит беспрепятственно — и клиент получает доступ к файлам, которые сервер раздавать не собирался.
В одной из рядом лежащих с публичной статикой папок лежит файл с CTF-флагом. Ваша задача — найти эндпоинт скачивания, обнаружить отсутствие проверки и через path-traversal-payload прочитать этот файл.
## Цели
1. Авторизуйтесь как `demo` / `demo` (для функции скачивания этой лабы аутентификация не критична, но в реальной разведке стоит пройти весь штатный путь).
2. Найдите эндпоинт скачивания файлов и эмпирически определите, как он строит путь и проверяет ли границы директории.
3. Сформируйте имя файла, которое выводит сервер за пределы публичной статики, и прочитайте файл с CTF-флагом.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |