
LittleCorporal: Автоматизированный генератор вредоносных документов на C#
LittleCorporal: автоматический генератор вредоносных документов на C#
C:\LittleCorporal\bin\Release>LittleCorporal.exe C:\beacon.bin explorer.exe
.____ .__ __ __ .__ _________ .__
| | |__|/ |__/ |_| | ____ \_ ___ \ _________________ ________________ | |
| | | \ __\ __\ | _/ __ \/ \ \/ / _ \_ __ \____ \ / _ \_ __ \__ \ | |
| |___| || | | | | |_\ ___/\ \___( <_> ) | \/ |_> > <_> ) | \// __ \| |__
| _______ \__||__| |__| |____/\___ >\______ /\____/|__| | __/ \____/|__| (____ /____/
\/ \/ \/ |__| \/
________
/ \
__ / (o)\__
/ ______\ \ I am the strongest debater in the whole Conseil.
| ____/__ __\____| I let myself be attacked, because I know how to defend myself.
[ --~~-- ] - Napoleon Bonaparte
| ( L )|
___----\ __ /----___
/ | < \____/ > | \
/ | < \--/ > | \
|||||| \ \/ / ||||||
| \ / o |
| | \/ === | |
| | |o ||| | |
| \______| +#* | |
| |o | |
\ | / /
|\__________|o / /
| | / /
[+] Parsed Arguments:
[>] Shellcode Path: C:\beacon.bin
[>] Target Process: explorer.exe
[+] Embedded shellcode in Loader.cs!
[+] Generated C# Loader artifact!
[+] Ran the .NET assembly through Donut!
[+] Donut artifact is located at: C:\LittleCorporal\Artifacts\payload.bin
[+] Path to Word document: C:\LittleCorporal\Artifacts\Form.doc
ПОЖАЛУЙСТА, ПРОЧТИТЕ ВЕСЬ README ПЕРЕД ИСПОЛЬЗОВАНИЕМ!
LittleCorporal принимает аргумент – имя процесса, в который будет внедряться код на удалённой машине (где планируется запустить вредоносный Word-документ), а также путь к локальному файлу шелл-кода в формате .bin – например, к блобу Beacon Stageless shellcode на той машине, с которой запускается LittleCorporal. Иными словами, чтобы использовать сгенерированный maldoc, необходимо указать уже запущенный процесс на целевой машине (локальной или другой). explorer.exe всегда присутствует в единственном экземпляре, поэтому используйте его, если неважно, в какой процесс внедряться.
LittleCorporal встраивает шелл-код и имя целевого процесса в Loader.cs, компилирует Loader.cs на лету в .NET .exe артефакт, а затем использует перехват потока (thread hijacking) для выполнения удалённого внедрения в процесс. Полученный .NET .exe артефакт (загрузчик на основе перехвата потока) передаётся в Donut для генерации позиционно-независимого шелл-кода, который выполнит этот .exe. Сгенерированный Donut шелл-код кодируется в base64, создаётся Word-документ, и финальный блоб Donut сохраняется в свойстве Word InlineShape.AlternativeText, которое способно вместить весь полезный загрузчик. Для этого в документ вставляется изображение (сейчас пустое, придавая документу «чистый» вид), а в альтернативный текст этого изображения помещается полезная нагрузка. Затем LittleCorporal использует VBA-«шаблон», хранящийся в проекте как текстовый файл, и внедряет этот макрос в сгенерированный Word-документ. Макрос называется autoopen, поэтому он открывается при открытии документа, а затем настроен на извлечение значения альтернативного текста ранее вставленного изображения, содержащего финальный полезный загрузчик, декодирование его из base64 и, наконец, использование Windows API-вызовов в VBA для выполнения локального внедрения в Word. По сути, проект использует простой «загрузчик» на VBA для локального внедрения в Word (что вызывает меньше подозрений, чем удалённое внедрение), а затем из этого локального внедрения выполняется шелл-код Donut – это ещё один загрузчик, выполняющий перехват потока для финального удалённого внедрения пользовательского шелл-кода в указанный процесс. Всё выполняется автоматически, включая генерацию Word-документа.
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\), и на целевой машине, где планируется запустить документ.LittleCorporal.exe, также должен быть установлен Office. Это необходимо, так как LittleCorporal взаимодействует с Word через COM. Обратите внимание, что сгенерированный Word-документ загружает пустое изображение из интернета – следовательно, интернет-доступ требуется как на компьютере с LittleCorporal, так и на удалённой машине, где будет открыт документ.CONTEXT, содержащую 64-битные типы данных. Это связано с тем, что перехват потока в настоящее время поддерживается только на 64-битных системах и требует специального шелл-кода, соответствующего соглашению о вызовах __fastcall. Я не планирую реализовывать 32-битную версию, но если появится запрос на слияние (pull request) с поддержкой 32-битных систем (ведь многие установки Microsoft Word 32-битные), я не исключаю такой возможности. Логически исправление невелико, но проблема заключается в необходимости отслеживания стека при переходе от __fastcall к __stdcall и вычислении новых смещений – это технически несложно, но довольно утомительно.LittleCorporal.exe измените на .Если вы планируете использовать этот проект в активных операциях red team, рассмотрите возможность настройки функции «Exit» в вашем шелл-коде на «чистый» выход с завершением потока, а не на полное завершение процесса, в котором находится шелл-код. Это можно настроить в msfvenom с помощью EXITFUNC=thread, а также в Cobalt Strike через Aggressor.
bin\Release (cd C:\Путь\к\LittleCorporal\bin\Release). Рекомендуется при перекомпиляции использовать Release-сборку вместо Debug.LittleCorporal.exe, и имя уже запущенного процесса на целевой машине, где планируется запустить Word-документ (LittleCorporal.exe C:\Путь\к\Shellcode.bin explorer.exe).LittleCorporal.exe cleanbool FUNC1 = true;