
LittleCorporal: Un generatore automatizzato di maldoc in C#
LittleCorporal: Un generatore automatizzato di Maldoc in C#
C:\LittleCorporal\bin\Release>LittleCorporal.exe C:\beacon.bin explorer.exe
.____ .__ __ __ .__ _________ .__
| | |__|/ |__/ |_| | ____ \_ ___ \ _________________ ________________ | |
| | | \ __\ __\ | _/ __ \/ \ \/ / _ \_ __ \____ \ / _ \_ __ \__ \ | |
| |___| || | | | | |_\ ___/\ \___( <_> ) | \/ |_> > <_> ) | \// __ \| |__
| _______ \__||__| |__| |____/\___ >\______ /\____/|__| | __/ \____/|__| (____ /____/
\/ \/ \/ |__| \/
________
/ \
__ / (o)\__
/ ______\ \ Sono il più forte dibattitore di tutto il Consiglio.
| ____/__ __\____| Mi lascio attaccare, perché so difendermi.
[ --~~-- ] - Napoleone 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
LEGGERE L'INTERO README PRIMA DELL'USO!
LittleCorporal accetta un argomento fornito dall'utente per un processo in cui iniettare su una macchina remota, sulla quale si prevede di eseguire il documento Word malevolo, e accetta anche un percorso a un file di shellcode locale memorizzato in formato .bin – come ad esempio un blob di shellcode Beacon Stageless sulla macchina su cui si esegue LittleCorporal. Quindi, se si desidera utilizzare il maldoc generato da questo progetto, è necessario specificare un processo già in esecuzione sulla macchina su cui si intende eseguire il maldoc (sia essa la macchina locale o una macchina diversa. explorer.exe ha sempre un'istanza, quindi usalo se non ti interessa quale processo iniettare).
LittleCorporal incorpora lo shellcode e il nome del processo di destinazione in Loader.cs, compila Loader.cs al volo in un artefatto .exe .NET, e quindi utilizza thread hijacking per eseguire l'iniezione di processo remoto. L'artefatto .exe .NET, che è il loader di thread hijacking, viene passato attraverso Donut per generare shellcode indipendente dalla posizione, che eseguirà l'.exe. Lo shellcode generato da Donut viene quindi codificato in base64, viene generato un documento Word, e il blob finale di Donut viene memorizzato in una proprietà di Word InlineShape.AlternativeText, che è in grado di contenere l'intero payload. Questo viene fatto inserendo una proprietà immagine (attualmente un'immagine vuota, che conferisce al documento un aspetto "vuoto") nel documento Word, come testo alternativo sull'immagine, che contiene il payload. LittleCorporal sfrutta quindi un "template" VBA, contenuto in questo progetto come file di testo, e inietta questa Macro nel documento Word appena generato. La Macro si chiama autoopen, quindi si apre all'apertura del documento, e poi è configurata per estrarre il valore del testo alternativo dell'immagine precedentemente generata, che contiene il payload finale, lo decodifica in base64, e infine utilizza chiamate API di Windows, in VBA, per eseguire l'iniezione locale in Word. In sostanza, questo progetto utilizza un semplice "loader" in VBA per eseguire l'iniezione locale in Word, che è un po' meno scrutinata dell'iniezione di processo remoto, e poi utilizza l'esecuzione dalla semplice iniezione locale per eseguire lo shellcode di Donut, che è un altro loader che esegue thread hijacking per l'iniezione di processo remoto finale dello shellcode fornito dall'utente nel processo specificato. Tutto questo è fatto in modo automatizzato, inclusa la generazione del documento Word.
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\) e sulla macchina di destinazione su cui prevedi di eseguire il documento.LittleCorporal.exe. Questo perché LittleCorporal deve interagire tramite COM con Word. Tieni inoltre presente che il documento Word generato scarica un'immagine vuota da Internet – ciò significa che avrai bisogno di accesso a Internet sul computer su cui esegui LittleCorporal e sulla macchina remota su cui prevedi di far detonare il documento Word.CONTEXT a 64 bit, che ha tipi di dati specifici per 64 bit. Ciò è dovuto al fatto che il thread hijacking è attualmente supportato solo su sistemi a 64 bit, poiché richiede shellcode personalizzato che aderisce specificamente alla convenzione di chiamata __fastcall. Non ho intenzione di implementare una versione a 32 bit della capacità di thread hijacking, ma se alla fine ci sarà una pull request per il supporto a 32 bit, dato che molte installazioni di Microsoft Word sono a 32 bit, non escluderei del tutto questa possibilità. Attualmente non dovrebbe essere una grande correzione dal punto di vista logico, il problema diventa l'onere e la seccatura di mantenere traccia dello stack quando si passa da __fastcall a __stdcall e calcolare nuovi offset. Tecnicamente non è complesso, ma è un po' faticoso.Se prevedi di utilizzare questo progetto per operazioni attive di red team, considera di impostare la funzionalità "Exit" del tuo shellcode per eseguire un'uscita "pulita" con un'uscita del thread, invece di uccidere completamente il processo in cui risiede lo shellcode. Questo può essere configurato con msfvenom tramite EXITFUNC=thread, e può anche essere configurato in Cobalt Strike tramite Aggressor.
bin\Release (cd C:\Path\to\LittleCorporal\bin\Release). Si raccomanda che, se scegli di ricompilare questo progetto, utilizzi una build Release invece di una Debug.LittleCorporal.exe e il processo già in esecuzione sulla macchina sulla quale desideri eseguire il documento Word. (LittleCorporal.exe C:\Path\To\Shellcode.bin explorer.exe)LittleCorporal.exe cleanbool FUNC1 = true;LittleCorporal.exe