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

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

File Upload: Path Traversal через имя файла

Загрузка аватара использует оригинальное имя файла без санитизации. Подмени filename в multipart-запросе для перезаписи шаблона и получения RCE.

Автор: Hack & Fix
Освоишь: magic-bytes проверкаrandom filenameвне docroot
Легко+30 XP ~17 мин php
CWE-434 · A04:2021 Pro
Обложка: File Upload: Path Traversal через имя файла Обложка: File Upload: Path Traversal через имя файла
Задача
# Загрузка файлов (Path traversal в имени файла) ## Сценарий Вы проводите аудит **ПиксельХата** — магазина товаров для геймеров на нативном PHP. В профиле покупателя есть загрузка аватара: файл попадает в каталог статики, ссылка сохраняется в базе и показывается на странице. Разработчики не стали усложнять: имя файла на диске берётся из multipart-запроса — по их мнению, «браузер всё равно пришлёт только имя». Перед запуском сообщества с аватарами и отзывами магазин решили проверить, корректно ли сервер обращается с клиентскими частями загрузки и что случится, если имя файла придёт с разделяющими каталоги символами. ## Цель 1. Авторизуйтесь и изучите загрузку аватара: какие части multipart-запроса полностью контролирует клиент и как сервер определяет имя файла на диске. 2. Направьте сохранение файла за пределы каталога загрузок — туда, где его содержимое исполнит интерпретатор при одном из последующих запросов. 3. Загруженным кодом выведите значение флага из окружения сервера. ## Теория В multipart-запросе каждая часть несёт собственные заголовки, и имя файла в них — такой же клиентский ввод, как любое поле формы: ручная отправка запроса позволяет указать там произвольную строку с разделителями каталогов. Начиная с PHP 8.1, помимо базового имени в сведениях о загрузке сохраняется и полный клиентский путь — со всеми компонентами обхода каталогов, без нормализации. Если путь сохранения строится присоединением клиентского значения к каталогу загрузок, а код ещё и охотно создаёт недостающие промежуточные каталоги, загрузка превращается в канал записи по произвольному пути. Ценный класс целей — файлы, которые приложение читает и исполняет само: шаблоны страниц и скрипты. **Уязвимый паттерн:** ```php // Имя из запроса используется как есть — вместе с разделителями: $filename = $files['avatar']['full_path'] ?? $files['avatar']['name']; $destPath = $uploadDir . $filename; ``` ## Точка входа атаки `POST /profile/avatar` — форма загрузки аватара в профиле; файл передаётся полем `avatar` (multipart). * **Обычный пользователь:** `demo` / `demo` * **Объект атаки:** имя файла в заголовке части multipart-запроса * **Признак успеха:** страница, использующая перезаписанный файл, исполняет ваш код и выводит флаг

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

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

File Upload: Content-Type Bypass

Загрузка файлов проверяет только расширение, но не содержимое. Атакующий может загрузить HTML/JS в файле с расширением .jpg.

+60 XP
PHP 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
Обложка лабы: File Upload: обход проверки расширения через Content-Type Обложка лабы: File Upload: обход проверки расширения через Content-Type
File Upload

File Upload: обход проверки расширения через Content-Type

Загрузчик изображений проверяет расширение файла, но не его содержимое. HTML-файл, переименованный в .jpg, загружается и исполняется в браузере.

+30 XP
Python Pro
Exploit Fix
Обложка лабы: 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