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

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

File Upload: Обход расширений и Path Traversal

Сервер принимает файлы с расширением .jpg, но слепо доверяет имени файла из Content-Disposition. Используйте Path Traversal, чтобы подбросить свой токен конфигурации и получить флаг.

Автор: Hack & Fix
Освоишь: magic-bytes проверкаrandom filenameвне docroot
Сложно+90 XP ~62 мин golang
CWE-434 · A04:2021 Pro
Обложка: File Upload: Обход расширений и Path Traversal Обложка: File Upload: Обход расширений и Path Traversal
Задача
# Path Traversal при загрузке файла ## Сценарий Вы проводите согласованный пентест магазина оптики **LensLoft**. В фокусе — загрузка аватара: форма отправляет файл, сервер кладёт его в каталог статики и показывает в профиле. Разработчики считают эндпоинт безопасным: имя сохранения якобы не контролируется пользователем. Вас смущает, как именно код добирается до имени файла из запроса. Служебная метка лабы хранится в окружении сервера и доступна шаблонизатору страниц — проверьте, можно ли добраться до неё через загрузку. ## Цель 1. Изучите multipart-запрос формы аватара: какие его части полностью контролирует клиент. 2. Направьте сохранение файла за пределы каталога загрузок — в место, содержимое которого сервер использует при рендеринге страниц. 3. Через перезаписанный ресурс добейтесь вывода служебной метки в ответе страницы и получите флаг. ## Теория Multipart-запрос содержит заголовки каждой части, включая имя файла. Браузер подставляет туда имя выбранного файла, но для сервера это обычная строка из запроса: клиент, отправляющий форму вручную, может вписать любую — с разделителями каталогов и восходящими сегментами. **Уязвимый паттерн:** ```go uploadPath := filepath.Join("static", "uploads", filename) os.WriteFile(uploadPath, fileData, 0644) ``` Имя из заголовка части запроса попадает в путь сохранения без очистки: восходящие сегменты выводят итоговый путь за пределы каталога загрузок. Ценность такой записи — файлы, которые приложение читает и исполняет позже. Здесь это шаблоны страниц: страница профиля перечитывает свой шаблон с диска при каждом обращении, а в наборе функций шаблонизатора зарегистрировано чтение переменных окружения — ровно то, что нужно для вывода метки. ## Точка входа атаки `POST /profile/avatar` — multipart-форма загрузки аватара (поле `avatar`); имя файла берётся из заголовка части запроса. * **Учётные данные:** `demo` / `demo` * **Цель:** служебная метка из окружения сервера — выведите её на странице профиля

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

другие лабы по этой уязвимости
Обложка лабы: File Upload Bypass через подмену Content-Type Обложка лабы: File Upload Bypass через подмену Content-Type
File Upload

File Upload Bypass через подмену Content-Type

Обработчик загрузки файлов проверяет только расширение (.jpg, .png, .gif), но не реальное содержимое файла. HTML-файл с расширением .jpg будет принят и отдан браузеру.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: File Upload Bypass через двойное расширение Обложка лабы: File Upload Bypass через двойное расширение
File Upload

File Upload Bypass через двойное расширение

Обработчик загрузки использует filepath.Ext() для проверки расширения, но эта функция возвращает только последнее расширение. Файл test.html.jpg проходит проверку, а Go http.FileServer может определить Content-Type по первому расширению.

+60 XP
Go Pro
Exploit Fix
Обложка лабы: File Upload: обход проверки через подделку Content-Type Обложка лабы: File Upload: обход проверки через подделку Content-Type
File Upload

File Upload: обход проверки через подделку Content-Type

Загрузчик изображений товара доверяет MIME-типу, который пришёл в заголовке Content-Type части multipart-формы. Атакующий подделывает заголовок и загружает HTML с активным контентом, выдавая его за PNG.

+90 XP
Node.js Pro
Exploit Fix
Обложка лабы: .htaccess Upload — RCE через перезапись конфигурации Apache Обложка лабы: .htaccess Upload — RCE через перезапись конфигурации Apache
File Upload

.htaccess Upload — RCE через перезапись конфигурации Apache

Загрузка .htaccess позволяет выполнять PHP-код внутри файлов с произвольным расширением.

+90 XP
PHP Pro
Exploit Fix