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

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

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

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

Автор: Hack & Fix
Освоишь: magic-bytes проверкаrandom filenameвне docroot
Сложно+90 XP ~62 мин nodejs
CWE-434 · A04:2021 Pro
Обложка: File Upload: обход проверки через подделку Content-Type Обложка: File Upload: обход проверки через подделку Content-Type
Задача
# File Upload: подделка Content-Type ## Сценарий **GearDen** — витрина «гаджеты для инженеров»: платы, клавиатуры, измерительные приборы. Покупательница Марина ведёт там клубный раздел и прикрепляет к товарам фотографии самоделок: на странице товара есть форма загрузки изображения. Разработчик витрины знал об опасности загрузки файлов и поставил фильтр: принимаются только картинки трёх графических типов. Технический директор клуба уверен, что фильтр проверяет не то свойство файла, — вам поручено это доказать. ## Цель 1. Войдите покупателем и найдите на странице товара форму загрузки изображения; попробуйте загрузить обычную картинку и файл «не того» типа. 2. Выясните, что именно проверяет фильтр приёма файла и какому заявленному свойству он доверяет. 3. Загрузите содержимое, не являющееся изображением, так, чтобы фильтр его пропустил, и добейтесь, чтобы браузер обработал сохранённый файл как веб-страницу при прямом открытии. 4. Получите флаг: войдите администратором магазина и купите товар «CTF Flag». ## Теория Multipart-форма несёт файл вместе с метаданными: имя и тип части выставляет клиент. Если сервер решает «картинка это или нет» по заявленному типу, атакующий объявляет графический тип для произвольных байтов — фильтр пропустит их, а на диске окажется, например, HTML-документ. **Уязвимый паттерн:** ```js const declaredMime = parsed.file.mimeType || ''; // тип заявил клиент if (!ALLOWED_MIME.has(declaredMime)) { /* отказ */ } ``` Вторая половина проблемы — на выдаче: когда другой пользователь открывает сохранённый файл по прямой ссылке, сервер не запрещает браузеру самостоятельно угадывать тип содержимого. Браузер видит текст с разметкой и исполняет его как страницу доверенного домена — со всем встроенным активным содержимым. ## Точка входа атаки `POST /product/:id/upload` — multipart-форма на странице товара: поле `csrf_token` (берётся со страницы товара) и файл в поле `image`. Сохранённые файлы открываются напрямую по `GET /uploads/<имя>`. * **Покупатель:** `demo` / `demo` * **Администратор:** `admin` / `SuperSecret`

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

другие лабы по этой уязвимости
Обложка лабы: File Upload: Path Traversal в имени файла (Express + busboy) Обложка лабы: File Upload: Path Traversal в имени файла (Express + busboy)
File Upload

File Upload: Path Traversal в имени файла (Express + busboy)

Загрузка аватара без санитизации имени файла позволяет перезаписать серверные шаблоны через path traversal в filename.

+60 XP
Node.js Pro
Exploit Fix
Обложка лабы: File Upload: Обход расширений и Path Traversal Обложка лабы: File Upload: Обход расширений и Path Traversal
File Upload

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

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

+90 XP
Go 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 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