Уязвимости в функциях загрузки файлов очень распространены.



При проведении анализа защищенности веб-приложений, важно знать, как обойти ограничения, так как это часто приводит к полной компрометации системы. А для разработчиков и инженеров полезно знать, как такие атаки происходят, чтобы корректно реализовать механизмы защиты.



Минимальный набор проверок File Upload:



Попробуйте различные расширения файлов: используйте разные варианты расширений файлов, например, php3, php4, php5, phtml для PHP-скриптов, asp, aspx и ashx для IIS. Список можно взять тут: https://github.com/danielmiessler/SecLists



Добавьте дополнительное расширение файла: если приложение не проверяет правильность расширения файла — добавьте еще одно расширение, например, из script.php в script.gif.php



Неправильная реализация Regex: например, некорректное регулярное выражение ".png|.jpeg" можно обойти с помощью следующей нагрузки bypasspng.php.



Измените регистр расширения: попробуйте разные комбинации строчных и прописных букв, например, pHp, PhP, phP, Php и т.д.



Приложение позволяет загружать файлы .svg?: SVG изображения — это просто данные XML. Используя XML, можно, например, добиться XSS.



Измените тип контента: при перехвате запроса с помощью Burp Suite, тип контента можно изменить, например, с "Content-type: application/x-php" на "Content-type: image/gif"



Добавьте magic байт в файл: магические байты служат подписями, которые используются веб-сервером для определения типа загружаемого файла. Например, добавив GIF87a в начало скрипта, сервер будет считать его файлом GIF. Например : Filename='1.php' , filetype: image/gif и начните содержимое файла с GIF29a



Попробуйте уменьшить размер файла: если используется ограничение размера файла, можно загрузить меньший скрипт для удаленного выполнения кода.



Попробуйте использовать исполняемые расширения: могут быть разрешены определенные исполняемые расширения, например .phtml, .shtml, .asa, .cer, .asax, .swf, или .xap.



Добавьте нулевой байт в имя файла: если сайт использует белые списки расширений файлов, их часто можно обойти, добавив %00 (HTML) или \x00 (hex) в конец имени файла. Например: php-reverse-shell.php%00.gif



Добавьте специальные символы перед расширением файла: на старых веб-серверах, добавление специальных символов, таких как ;%$&, сразу после имени файла, например, shell;.php, может помочь обойти белые списки расширений файлов.



Вставьте данные EXIF: исполняемый скрипт может быть вставлен в изображение в форме метаданных комментария, который затем будет выполнен, если веб-сервер обрабатывают эти данные.



Попробуйте использовать обозначение Windows 8.3 для имени файла: можно использовать короткую версию имени файла Windows 8.3. Например, shell.aspx станет SHELL~1.ASP



→ Попробуйте добавить нейтральные символы после имени файла: специальные символы, такие как пробелы или точки в Windows, или точки и слэши в Linux в конце имени файла, будут автоматически удалены (например, shell.aspx … … . . .. .., file.asp.).



Обход каталога: попробуйте использовать вместо имени файла ../../../../etc/passwd и подобные, возможно, вы наткнетесь на новую уязвимость



Полезные ссылки:



- Перезапись файла конфигурации сервера

- Обфускация расширений файлов

- Race condition при загрузке файлов

- Небезопасная десериализация, ведущая к полному захвату сервера

- OWASP Unrestricted File Upload



Накидывайте еще способы обхода и полезные ссылки по теме в комментарии!