Уязвимости в функциях загрузки файлов очень распространены.
При проведении анализа защищенности веб-приложений, важно знать, как обойти ограничения, так как это часто приводит к полной компрометации системы. А для разработчиков и инженеров полезно знать, как такие атаки происходят, чтобы корректно реализовать механизмы защиты.
Минимальный набор проверок File Upload:
→ Попробуйте различные расширения файлов: используйте разные варианты расширений файлов, например, php3, php4, php5, phtml для PHP-скриптов, asp, aspx и ashx для IIS. Список можно взять тут: https://github.com/danielmiessler/SecLists
→ Добавьте дополнительное расширение файла: если приложение не проверяет правильность расширения файла — добавьте еще одно расширение, например, из script.php в script.gif.php
→ Неправильная реализация Regex: например, некорректное регулярное выражение
→ Измените регистр расширения: попробуйте разные комбинации строчных и прописных букв, например, pHp, PhP, phP, Php и т.д.
→ Приложение позволяет загружать файлы .svg?: SVG изображения — это просто данные XML. Используя XML, можно, например, добиться XSS.
→ Измените тип контента: при перехвате запроса с помощью Burp Suite, тип контента можно изменить, например, с
→ Попробуйте использовать исполняемые расширения: могут быть разрешены определенные исполняемые расширения, например
→ Добавьте нулевой байт в имя файла: если сайт использует белые списки расширений файлов, их часто можно обойти, добавив
→ Вставьте данные EXIF: исполняемый скрипт может быть вставлен в изображение в форме метаданных комментария, который затем будет выполнен, если веб-сервер обрабатывают эти данные.
→ Попробуйте использовать обозначение Windows 8.3 для имени файла: можно использовать короткую версию имени файла Windows 8.3. Например,
→ Обход каталога: попробуйте использовать вместо имени файла
Полезные ссылки:
- Перезапись файла конфигурации сервера
- Обфускация расширений файлов
- Race condition при загрузке файлов
- Небезопасная десериализация, ведущая к полному захвату сервера
- OWASP Unrestricted File Upload
Накидывайте еще способы обхода и полезные ссылки по теме в комментарии!
При проведении анализа защищенности веб-приложений, важно знать, как обойти ограничения, так как это часто приводит к полной компрометации системы. А для разработчиков и инженеров полезно знать, как такие атаки происходят, чтобы корректно реализовать механизмы защиты.
Минимальный набор проверок 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
Накидывайте еще способы обхода и полезные ссылки по теме в комментарии!