
LittleCorporal: Um Gerador Automatizado de Maldoc em C#
LittleCorporal: Um Gerador Automatizado de Maldoc em 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
LEIA TODO O README ANTES DE USAR!
O LittleCorporal aceita um argumento fornecido pelo usuário para um processo no qual injetar em uma máquina remota, onde você planeja executar o documento malicioso do Word, e também aceita um caminho para um arquivo local de shellcode armazenado no formato .bin — como um blob de shellcode sem estado (Beacon Stageless) na máquina em que você está executando o LittleCorporal. Portanto, se você deseja usar o maldoc gerado a partir deste projeto, precisará especificar um processo já em execução na máquina onde pretende executar o maldoc (seja na máquina local ou em outra máquina. O explorer.exe sempre terá uma instância, então use-o se não se importa com qual processo injetar).
O LittleCorporal incorpora o shellcode e o nome do processo alvo no Loader.cs, compila o Loader.cs em tempo real em um artefato .NET .exe e, em seguida, utiliza thread hijacking para realizar injeção remota de processo. O artefato .NET .exe, que é o carregador de thread hijacking, é enviado através do Donut para gerar shellcode independente de posição, que executará o .exe. O shellcode gerado pelo Donut é então codificado em base64, um documento do Word é gerado, e o blob final do Donut é armazenado em uma propriedade do Word InlineShape.AlternativeText, que é capaz de armazenar todo o payload. Isso é feito inserindo uma propriedade de imagem (atualmente uma imagem em branco, dando ao documento uma aparência "em branco") no documento do Word, como texto alternativo na imagem, que contém o payload. Em seguida, o LittleCorporal utiliza um "modelo" VBA, contido neste projeto como um arquivo de texto, e injeta essa Macro no documento do Word recém-gerado. A Macro é nomeada autoopen, portanto, é aberta quando o documento é aberto, e então configurada para extrair o valor do texto alternativo da imagem gerada anteriormente, que contém o payload final, decodifica em base64 e, finalmente, usa chamadas de API do Windows, em VBA, para realizar injeção local no Word. Em essência, este projeto utiliza um simples "carregador" em VBA para realizar injeção local no Word, que é um pouco menos examinado do que a injeção remota de processo, e então usa a execução da injeção local simples para executar o shellcode do Donut, que é outro carregador que realiza thread hijacking para a injeção remota final do shellcode fornecido pelo usuário no processo especificado pelo usuário. Tudo isso é feito de forma automatizada, incluindo a geração do documento do Word.
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ existe) e na máquina de destino onde planeja executar o documento.LittleCorporal.exe. Isso porque o LittleCorporal precisa interagir via COM com o Word. Observe também que o documento do Word gerado baixa uma imagem em branco da internet — o que significa que você precisará ter acesso à internet no computador onde executa o LittleCorporal e na máquina remota onde planeja detonar o documento do Word.CONTEXT de 64 bits, que possui tipos de dados específicos de 64 bits. Isso ocorre porque o thread hijacking atualmente é suportado apenas em sistemas de 64 bits, pois requer shellcode personalizado que adere especificamente à convenção de chamada __fastcall. Não pretendo implementar uma versão de 32 bits da capacidade de thread hijacking, mas se eventualmente houver um pull request para suporte de 32 bits, já que muitas instalações do Microsoft Word são de 32 bits, eu não descartaria totalmente essa possibilidade. Atualmente, não deveria ser um grande problema do ponto de vista lógico; essa questão se torna o fardo e a inconveniência de manter o controle da pilha ao mudar de __fastcall para __stdcall e calcular novos offsets. Isso não é complexo do ponto de vista técnico, mas é um tanto trabalhoso.Se você planeja usar este projeto para operações ativas de Red Team, considere configurar a funcionalidade "Exit" do seu shellcode para realizar uma saída "limpa" com uma saída de thread, em vez de matar completamente o processo no qual o shellcode reside. Isso pode ser configurado com msfvenom via EXITFUNC=thread, e também pode ser configurado no Cobalt Strike como tal via Aggressor.
bin\Release (cd C:\Path\to\LittleCorporal\bin\Release). Recomenda-se que, se você optar por recompilar este projeto, use uma compilação Release em vez de uma compilação Debug.LittleCorporal.exe e o processo já em execução na máquina na qual você deseja executar o documento do Word. (LittleCorporal.exe C:\Path\To\Shellcode.bin explorer.exe)LittleCorporal.exe cleanbool FUNC1 = true;LittleCorporal.exe