Методы обхода фильтров по расширению при загрузке файлов

  • Автор темы Gidroponika
  • Дата начала
G

Gidroponika

Введение

Если во время пентестов система или приложение позволяет загружать любые файлы, то задача, связанная с получением доступа к серверу и выполнением вредоносного кода, упрощается. С другой стороны, если есть ограничения и фильтр загружаемых файлов по расширению, то сначала нужно обойти эту проверку. В этой статье мы поговорим о том, как в веб-приложениях обрабатывают и проверяют файлы, загружаемые на сервер, а также методы обхода этих проверок.

Фильтрация на стороне клиента

В этом случае проверка происходит в браузере средствами JavaScript, VBScript или HTML5 перед отправкой файлов на сервер. Программисты используют этот метод для того, чтобы оптимизировать взаимодействие пользователя с приложением и быстро выдать ответ на уровне браузера.

Обход фильтрации на стороне клиента

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

Пример:

  1. <script type="text/javascript">
2. var _validFileExtensions = [".jpg", ".jpeg", ".bmp", ".gif", ".png"];

3. function Validate(oForm) {

4. var arrInputs = oForm.getElementsByTagName("input");

5. for (var i = 0; i < arrInputs.length; i++) {

6. var oInput = arrInputs;

7. if (oInput.type == "file") {

8. var sFileName = oInput.value;

9. if (sFileName.length > 0) {

10. var blnValid = false;

11. for (var j = 0; j < _validFileExtensions.length; j++) {

12. var sCurExtension = _validFileExtensions[j];

13. if (sFileName.substr(sFileName.length - sCurExtension.length, sCurExtension.length).toLowerCase() == sCurExtension.toLowerCase()) {

14. blnValid = true;

15. break;

16. }

17. }

18.

19. if (!blnValid) {

20. alert("Sorry, " + sFileName + " is invalid, allowed extensions are: " + _validFileExtensions.join(", "));

21. return false;

22. }

23. }

24. }

25. }

26.

27. return true;

28. }

29. </script>

Как показано выше, JavaScript обрабатывает запрос перед отсылкой на сервер. Внутри кода происходит проверка, принадлежит ли расширение файла графическому формату (jpg, jpeg, bmp, gif, png). Этот метод фильтрации можно обойти после изменения содержимого запроса и самого файла на вредоносный код с расширением, способствующим выполнению этого кода.

GS1poXPtuZg.jpg

Рисунок 1: Результат проверки файла на предмет присутствия расширения из списка графических форматов
Как показано на рисунке, загрузчик файлов приостанавливает отправку запроса, если мы пытаемся загрузить php-файл напрямую.

3McL4opxIPA.jpg

Рисунок 2: Запрос, формируемый во время загрузки файла
Мы смогли обойти эту проверку посредством загрузки изображения через браузер, последующего изменения расширения в запросе, который будет отсылаться на сервер, а также изменения содержимого файла. Мы поменяли расширения с .jpeg на .php и заменили содержимое файла на вредоносный код.

Проверка на стороне сервера

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

В черном списке находятся расширения файлов, которые не принимаются к загрузке ни при каких обстоятельствах, например, php, aspx. В случае с белым списком ситуация полностью противоположная. В этом перечне находятся только те расширения файлов, которые разрешены для загрузки на сервер, например, jpg, jpeg, gif.

Обход проверки на стороне сервера

Некоторые типы проверок можно обойти при помощи загрузки файла с не очень популярным расширением или используя различные трюки во время загрузки.

В случае с обходом черного списка можно попробовать загрузить файлы со следующими расширениями: pht, phpt, phtml, php3, php4, php5, php6.

Обход белого списка осуществляется при помощи некоторых трюков, как, например, добавление пустого байта в имя файла (shell.php%00.gif) или использование двойного расширения (shell.jpg.php).

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

Пример:

  1. if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
2. && $imageFileType != "gif" ) {

3. echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";

В коде выше показан пример кода загрузчика файлов, принимающего лишь несколько расширений (jpg, jpeg, gif). Далее рассмотрим пример обхода различных типов проверок.

Пример обхода черного списка

UycRbXkFcD4.jpg

Рисунок 3: Обход фильтра при помощи загрузки файла с непопулярным расширением
На рисунке выше показан обход проверки при помощи загрузки файла с расширением .php5, который принимается сервером Apache и далее запускается автоматически как обычный php-файл.

Пример обхода белого списка

A3iTfs2FEoQ.jpg

Рисунок 4: Обход фильтра при помощи загрузки файла с двойным расширением
На рисунке выше показано, как можно обойти белый список через загрузку php-файла с двойным расширением.

Проверка заголовка CONTENT-TYPE

В этом методе сервер проверяет содержимое файла на предмет присутствия корректного MIME-типа, который можно увидеть в HTTP-запросе. Например, некоторые загрузчики картинок проверяют, чтобы в заголовке Content-Type присутствовал тип image.

Обход проверкиContent-Type

Этот класс фильтров можно обойти посредством изменения в файле shell.php или shell.aspx содержимого параметра Content-Type на значение «image/png», «image/jpeg» или «image/gif».

Пример:

  1. <?php
2.

3. $mimetype = mime_content_type($_FILES['file']['tmp_name']);

4. if(in_array($mimetype, array('image/jpeg', 'image/gif', 'image/png'))) {

5. move_uploaded_file($_FILES['file']['tmp_name'], '/uploads/' . $_FILES['file']['name']);

6. echo 'OK';

7.

8. } else {

9. echo 'Upload a real image';

10. }

В коде выше мы видим, что проверяется MIME-тип, являющийся частью заголовка Content-Type, у файла, загружаемого на сервер. В данном случае загрузчик принимает только файлы со следующими типами: image/jpeg, image/gif и image/png. Мы можем легко обойти этот фильтр, изменив поле Content-Type во время загрузки исполняемого файла на тот MIME-тип, который принимается веб-сервером.

iymgLhTgE8c.jpg

Рисунок 5: Пример измененного поля Content-Type при загрузке php-скритпа
Проверка заголовка CONTENT-LENGTH

В этом случае сервер проверяет размер содержимого заголовка Content-Length у загружаемого файла и не допускает загрузку файлов, у которых этот размер превышает определенное значение. Хотя этот метод не настолько популярен, но может использоваться в некоторых загрузчиках.

Обход проверкиCONTENT-LENGTH

Этот фильтр обходится при помощи загрузки вредоносного кода очень небольшого размера в зависимости от того, какое максимальное значение используется при сравнении веб-сервером. Максимальное значение можно выяснить через загрузку нескольких файлов различного размера с целью выяснения, какие файлы будут приниматься, а какие нет.

Пример:

  1. if ($_FILES["fileToUpload"]["size"] > 30) {
2. echo "Sorry, your file is too large.";

3. }

В коде выше загрузчик не принимает файлы более 30 байт. Как было сказано выше, этот фильтр можно обойти при помощи загрузки вредоносного кода очень маленького размера.

Рисунок 6: Пример обхода фильтра по заголовку CONTENT-LENGTH
 
Похожие темы
devqp Статья Практические методы обхода антифрод-систем: ключевые принципы Уязвимости и взлом 0
devqp Статья Извлечение учетных данных RDP: методы обхода EDR для Red Team Уязвимости и взлом 0
Admin Статья Методы маскировки трафика и обхода средств обнаружения и блокировок (ShadowSocks, V2Ray/X-Ray и Cloak) Анонимность и приватность 0
Support81 HardBit 4.0: шифрование по паролю и сложные методы обхода анализа Новости в сети 0
devqp Статья Техники персистенции в пользовательском режиме: методы и инструменты Уязвимости и взлом 0
devqp Статья Полное руководство по FTID: методы мошеннических возвратов от V1 до V10 Фишинг, мошенничество, СИ 0
devqp Статья Эффективные методы построения лояльной команды: от НЛП до ситуационного контроля Полезные статьи 0
devqp Статья Эффективные методы защиты от утечки геолокации в сети Анонимность и приватность 0
devqp Статья Уязвимости генерации Unpredictable Number в EMV и методы извлечения ARQC Уязвимости и взлом 0
devqp Статья Обход защиты CloudFlare: методы и инструменты Уязвимости и взлом 0
Admin UFOLABSNEWS Северокорейские хакеры используют сложные методы для атак на разработчиков. Новости в сети 0
Admin UFOLABSNEWS Троян Gaslight использует новые методы обмана для противодействия ИБ-специалистам. Новости в сети 0
Admin Интересно Группа Webworm активно развивает свои методы атак. Новости в сети 0
Admin Интересно Израильские компании разработали методы отслеживания пользователей Starlink. Новости в сети 0
Admin Интересно Китайские хакеры используют изощрённые методы для слежки за журналистами и активистами. Новости в сети 0
Admin Статья Новые методы антидебага Полезные статьи 0
Admin Статья Физическая прослушка: методы и защита. Анонимность и приватность 0
Admin Статья Backdoors и шпионы. Методы защиты Анонимность и приватность 0
Admin Статья Методы иньекции ELF файлов Вирусология 0
Admin Статья Методы поиска по электронной почте OSINT 0
wrangler65 Обход sms уведомлений и вход в лк: Cовременные методы работы с брут ба 2025 Все остальное 0
Support81 Взгляд изнутри: BlackBastaGPT раскрывает тактики и методы известной хакерской банды Новости в сети 0
El_IRBIS Интересно WallEscape: Уязвимость и методы её предотвращения. Уязвимости и взлом 0
TrashHellSoDomy Работающие методы по борьбе с гриппом типа ковида Юмор 3
N Методы манипуляции. 10 приемов. Фишинг, мошенничество, СИ 0
B Ищу методы для того чтобы быстро поспать с парнями бесплатно и безопасно. Свободное общение 2
Y Backdoors и шпионы. Методы защиты Анонимность и приватность 34
K Владимир Макулов-методы Быстрого Погружения В Глубокий Гипноз. Гипнотерапия. Раздачи и сливы 0
K Geekbrains Безопасность в сети. Методы взлома и защиты https://mega.nz/#%2194l2kbLS%21B-PiBnPOyI9xypx8p-SqwM8S-JT5o1GRBlBV5cRFrg4 Раздачи и сливы 0
K Новые методы социальной инженерии Ч.2 Полезные статьи 0
K Новые методы социальной инженерии Полезные статьи 0
R [instagram] Раскручиваем Аккаунт С 0 До 50к Фолловеров Быстрые Методы Заработка Способы заработка 0
T Методы психологического воздействия Полезные статьи 0
A Методы шифрования Программирование 1
M Методы взлома телофонов по bluetooth Уязвимости и взлом 2
Admin UFOLABSNEWS QR-коды стали новым инструментом для обхода корпоративных систем безопасности. Новости в сети 0
devqp Статья Иллюзия анонимности: Как Tor Browser палит вас по железу (Canvas/WebGL) и метод обхода Анонимность и приватность 0
Admin UFOLABSNEWS Дешёвые ТВ-приставки могут использоваться для обхода блокировок и сбора данных. Новости в сети 0
Admin Интересно Хакеры решили испортить лето инженерам Microsoft. Детали полного обхода BitLocker выйдут уже в июне. Новости в сети 0
Admin Интересно Специалисты раскрыли технику Underminr для обхода защитных DNS-фильтров. Новости в сети 0
Admin Интересно Европа готовит запрет VPN из-за обхода возрастных фильтров. Новости в сети 0
Admin Интересно Telegram нашёл новый способ обхода блокировок в России. Новости в сети 0
Admin Интересно EDR-киллеры: инструменты для обхода защиты в современных атаках. Новости в сети 0
Admin Интересно Хакеры используют вредоносное ПО BlackSanta для обхода систем защиты. Новости в сети 0
Admin Интересно $500 – антивирусы и EDR больше не помогут. Хакеры начали торговлю инструментом для обхода защиты Windows. Новости в сети 0
Admin Статья Пишем сплойт для обхода DEP: ret2libc и ROP-цепочки против Data Execution Prevention. Уязвимости и взлом 0
Support81 Риск обхода Secure Boot угрожает почти 200 000 ноутбуков с Linux Framework Новости в сети 0
wrangler65 Создание Powershell Shellcode Downloader для обхода Defender Ч.2 Полезные статьи 0
wrangler65 Создание Powershell Shellcode Downloader для обхода Defender (Без обхода Amsi) Полезные статьи 0
Support81 Роскомнадзор начнёт получать данные о попытках обхода блокировок Новости в сети 0

Название темы