File Upload: обход проверки через подделку Content-Type
Загрузчик изображений товара доверяет MIME-типу, который пришёл в заголовке Content-Type части multipart-формы. Атакующий подделывает заголовок и загружает HTML с активным контентом, выдавая его за PNG.
hardnodejsPro
Задача
# Обход проверки при загрузке файлов
## Сценарий
Перед вами Express-приложение интернет-магазина SecureShop. Авторизованные пользователи могут прикреплять к страницам товаров изображения — обычная функция «загрузить картинку для отзыва или товара». Разработчик подумал о безопасности и **добавил проверку формата** загружаемых файлов: явно перечислил, какие MIME-типы изображений разрешены.
Однако проверка реализована не самым надёжным способом — она опирается на свойство файла, которое полностью контролируется клиентом. Этого достаточно, чтобы создать ситуацию, в которой сервер сохраняет «изображение», которое на самом деле им не является, а потом, когда браузер другого пользователя его «открывает», происходит непредусмотренное поведение.
Ваша задача — понять, что именно проверяет фильтр и какое свойство он упускает, использовать это для загрузки опасного содержимого, и через результирующее поведение получить CTF-флаг.
## Цели
1. Авторизуйтесь как `demo` / `demo` и найдите функцию загрузки изображения на странице товара.
2. Изучите, какие именно проверки выполняет сервер при загрузке файла. Чему он доверяет, а что — игнорирует?
3. Сформируйте файл, который пройдёт фильтр, но при последующем обращении к нему браузер интерпретирует не как изображение.
4. Используйте получившееся поведение, чтобы получить CTF-флаг через профиль пользователя.
## Данные
| Параметр | Значение |
|----------|----------|
| Обычный пользователь | `demo` / `demo` |