
Toolbox contenente note di ricerca e codice PoC per armare il DLR di .NET
Toolbox contenente note di ricerca e codice PoC per armare il DLR di .NET
| Script | Descrizione |
|---|---|
Kukulkan | Una versione ridotta di SILENTTRINITY, DLL ed EXE C# che incorporano un motore IPY. Le comunicazioni sono crittografate e possono essere utilizzate con CobaltStrike |
Invoke-JumpScare.ps1 | Esegue shellcode utilizzando un compilatore Boolang incorporato, nulla tocca il disco (almeno da quello che ho visto) e non vengono effettuate chiamate a csc.exe :) |
Invoke-IronPython.ps1 | Esegue codice IronPython utilizzando il motore IPY incorporato. Stesso concetto di Invoke-JumpScare ma usando IronPython. |
Invoke-ClearScript.ps1 | Esegue JScript (o VBScript) utilizzando il motore ClearScript incorporato |
SharpSnek.cs | Codice C# che incorpora un motore IronPython ed esegue codice IPY incorporato. Aggancia AppDomain.CurrentDomain.AssemblyResolve per risolvere gli assembly necessari in fase di esecuzione. |
runBoo.cs | Versione C# di Invoke-JumpScare. Esegue shellcode utilizzando un compilatore Boolang incorporato. |
runBooAssemblyResolve.cs | Codice C# che incorpora un compilatore Boolang ed esegue codice Boolang incorporato. Aggancia AppDomain.CurrentDomain.AssemblyResolve per risolvere gli assembly necessari in fase di esecuzione. |
minidump.boo | Script Boolang nativo per eseguire il dump della memoria utilizzando MiniDumpWriteDump |
shellcode.boo | Script Boolang nativo che esegue shellcode. Attualmente contiene 3 tecniche diverse (QueueUserAPC, CreateThread/WaitForSingleObject, WriteProcessMemory/CreateRemoteThread) |
Invoke-SSharp.ps1 | Esegue SSharp da un compilatore incorporato all'interno di PowerShell. La compilazione non chiama csc.exe |
Invoke-Boolang.ps1 | Esegue codice Boo da un compilatore incorporato. Fornisce anche soluzioni alternative per alcuni bug che ho scoperto quando il compilatore Boolang viene incorporato all'interno di PowerShell. |
Il DLR di .NET è semplicemente pazzesco, ti permette di fare cose assurde come incorporare compilatori/motori all'interno di altri linguaggi .NET (es. PowerShell e C#), rimanendo comunque Opsec safe e stando in memoria. Nel caso di IronPython, puoi persino avere quella che chiamo 'engine inception': vuoi incorporare un motore IPY all'interno di un motore IPY dentro un altro motore IPY? (yo dawg, ho sentito che ti piacciono i motori IPY...).
Da una prospettiva offensiva, questo offre una flessibilità assurda e una serie di vantaggi, per citarne alcuni:
Accesso immediato all'API .NET, senza passare da PowerShell in alcun modo. In sostanza, usando il DLR puoi avere tutta la potenza di PowerShell, ma senza PowerShell e in un linguaggio che (di solito) è più facile per scrivere script (es. Python)
Quantità assurde di reflection/embedding in continuo, il che significa più evasione.
Usando il DLR aggiri sempre AMSI (se strumenti correttamente i tuoi payload), senza bisogno di offuscare, patchare roba ecc..
Tutto il tuo 'male' può essere codificato nel linguaggio del motore/compilatore incorporato. Se lo fai usando PowerShell, ScriptBlock Logging non vede nulla poiché tutta la magia avviene nel DLR.
Di solito, tutti i linguaggi DLR hanno un modo per chiamare metodi nativi, sia tramite il linguaggio stesso che compilando dinamicamente C# (es. Add-Type di PowerShell).
Se si sceglie il primo metodo, non vengono effettuate chiamate a csc.exe e di solito nulla viene scritto su disco, poiché i linguaggi generano tutto il necessario in memoria tramite codice IL.
Possiamo spingerci "in basso e in alto quanto vogliamo.." (@Op_nomad) e questo ci consente di fare tutte le cose belle che amiamo (iniettare shellcode, DLL non gestite, caricare PE ecc..)
Consente una rapida ri-attrezzatura e armamento dei payload. Non è necessaria alcuna compilazione manuale.
Se sei interessato a questo, ecco alcuni altri strumenti che cercano anche loro di armare il DLR:
Attenzione: se inizi a leggere questa roba, ti ritroverai in una tana di coniglio infernale (con veri conigli demoniaci).
Invoke-NeoLua.ps1 |
| Esegue codice Lua da un compilatore incorporato all'interno di PowerShell. |