
Boîte à outils contenant des notes de recherche et du code PoC pour l'armement du DLR de .NET.
Boîte à outils contenant des notes de recherche et du code PoC pour weaponiser le DLR de .NET
| Script | Description |
|---|---|
Kukulkan | Une version allégée de SILENTTRINITY, DLL et EXE C# qui intègrent un moteur IPY. Les communications sont chiffrées et peuvent être utilisées avec CobaltStrike |
Invoke-JumpScare.ps1 | Exécute du shellcode à l'aide d'un compilateur Boolang embarqué, rien n'atterrit sur le disque (du moins d'après ce que j'ai vu) et aucun appel à csc.exe n'est effectué :) |
Invoke-IronPython.ps1 | Exécute du code IronPython à l'aide du moteur IPY embarqué. Même concept que Invoke-JumpScare, mais avec IronPython. |
Invoke-ClearScript.ps1 | Exécute du JScript (ou VBScript) à l'aide du moteur ClearScript embarqué |
SharpSnek.cs | Code C# qui intègre un moteur IronPython et exécute du code IPY embarqué. Intercepte AppDomain.CurrentDomain.AssemblyResolve pour résoudre les assemblies nécessaires à l'exécution. |
runBoo.cs | Version C# de Invoke-JumpScare. Exécute du shellcode à l'aide d'un compilateur Boolang embarqué. |
runBooAssemblyResolve.cs | Code C# qui intègre un compilateur Boolang et exécute du code Boolang embarqué. Intercepte AppDomain.CurrentDomain.AssemblyResolve pour résoudre les assemblies nécessaires à l'exécution. |
minidump.boo | Script Boolang natif pour dumper la mémoire à l'aide de MiniDumpWriteDump |
shellcode.boo | Script Boolang natif qui exécute du shellcode. Contient actuellement 3 techniques différentes (QueueUserAPC, CreateThread/WaitForSingleObject, WriteProcessMemory/CreateRemoteThread) |
Invoke-SSharp.ps1 | Exécute SSharp à partir d'un compilateur embarqué dans PowerShell. La compilation n'appelle pas csc.exe |
Invoke-Boolang.ps1 | Exécute du code Boo à partir d'un compilateur embarqué. Il fournit également des solutions de contournement pour certains bugs que j'ai découverts lorsque le compilateur Boolang est embarqué dans PowerShell. |
Le DLR de .NET est juste complètement dingue, il permet de faire des choses folles comme embarquer de foutus compilateurs/moteurs dans d'autres langages .NET (par ex. PowerShell et C#) tout en restant opsec-safe et en restant en mémoire. Dans le cas d'IronPython, on peut même avoir ce que j'appelle « l'inception de moteurs » : vous voulez embarquer un moteur IPY dans un moteur IPY dans un autre moteur IPY ? (yo dawg, j'ai entendu dire que t'aimais les moteurs IPY...).
D'un point de vue offensif, cela offre une flexibilité absolument folle et un certain nombre d'avantages, pour n'en citer que quelques-uns :
Accès prêt à l'emploi à l'API .NET, sans passer par PowerShell d'aucune manière. Essentiellement, l'utilisation du DLR vous donne toute la puissance de PowerShell, mais sans PowerShell et dans un langage (généralement) plus facile à scripter (par ex. Python)
Des quantités folles de reflection/embedding en permanence, ce qui signifie plus d'évasion.
Avec le DLR, vous contournez toujours AMSI (si vous instrumentez correctement vos payloads), pas besoin d'obfusquer, de patcher des trucs, etc..
Tout votre « mal » peut être codé dans le langage de votre moteur/compilateur embarqué. Si vous faites ça avec PowerShell, ScriptBlock Logging ne voit rien puisque toute la magie se passe dans le DLR.
Généralement, tous les langages DLR ont un moyen d'appeler des méthodes natives, soit via le langage lui-même, soit en compilant dynamiquement du C# (par ex. Add-Type de PowerShell).
Si vous optez pour la première méthode, aucun appel à csc.exe n'est effectué et généralement rien n'est écrit sur le disque, car les langages génèrent tout le nécessaire en mémoire via du code IL.
Nous pouvons aller « aussi bas et aussi haut que nous le voulons » (@Op_nomad) et cela nous permet de faire toutes les bonnes choses que nous aimons (injecter du shellcode, des DLL non managées, charger des PE, etc..)
Permet un ré-outillage rapide et la weaponisation des payloads. Aucune compilation manuelle n'est nécessaire.
Si vous êtes intéressé, voici quelques autres outils qui tentent également de weaponiser le DLR :
Soyez prévenus : si vous commencez à lire tout ça, vous allez plonger dans un terrier de lapin infernal (avec de vrais lapins démons).
Invoke-NeoLua.ps1 |
| Exécute du code Lua à partir d'un compilateur embarqué dans PowerShell. |