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