
Excel 4.0 (XLM) Makro-Generator zum Injizieren von DLLs und EXEs in den Speicher.
| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| by @JoeLeonJr (@FortyNorthSec)
EXCELntDonut ist ein Generator für XLM-Makros (Excel 4.0). Starte mit C#-Quellcode (EXE) und erhalte ein XLM-Makro (Excel 4.0), das deinen Code im Arbeitsspeicher ausführt. XLM-Makros (Excel 4.0) können in .XLS-Dateien gespeichert werden.
chmod +x install.sh
./install.sh
Was wird installiert?
Wenn du EXCELntDonut nur als Python-Skript ausführen möchtest, musst du eine virtuelle Umgebung mit den beiden Paketen "pandas" und "donut-shellcode" einrichten. Außerdem musst du apt-get install mono-complete ausführen und das Skript drive.py mit python3 aufrufen. Wir empfehlen, einfach das Bash-Skript ./install.sh zu verwenden, aber die Entscheidung liegt bei dir.
Usage:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Flags:
(required)
-f Pfad zur Datei mit deinem C#-Quellcode (nur EXE)
-r Referenzen, die zur Kompilierung deines C#-Codes benötigt werden (dieselben, die du bei der Verwendung von mcs unter Linux angeben würdest)
(z. B. -r 'System.Management')
(optional)
-o Ausgabedateiname
--sandbox
Führe grundlegende Sandbox-Prüfungen durch. Diese werden aktualisiert, sobald neue Ansätze entdeckt werden.
--obfuscate
Führe eine grundlegende Makro-Verschleierung durch.
Du stellst eine C#-Datei mit deiner Payload bereit (z. B. eine EXE mit einer main-Methode, die eine Cobalt-Strike-Beacon-Payload ausführt). Diese C#-Datei wird mit MCS in zwei .NET-Assemblys kompiliert: x86 und x64. Nach der Kompilierung wandeln die großartigen Tools Donut (für x86) und CLRvoyance (für x64) jede Assembly in positionsunabhängigen Shellcode um. Anschließend werden alle Nullbytes entfernt, da XLM-Makros (Excel 4.0) nicht gut mit Nullbytes umgehen, und die Payload wird in Zeilen mit maximal 255 Zeichen (für x86) bzw. 10 Zeichen (für x64) aufgeteilt.
Sobald der Shellcode vorbereitet ist, wird er mit grundlegenden Prozessinjektionsfunktionen (VirtualAlloc, WriteProcessMemory und CreateThread) sowie einer Architekturprüfungsfunktion kombiniert, um zu bestimmen, welche Payload (x86 oder x64) auf dem Zielsystem ausgeführt werden soll. Wenn du Sandbox-Prüfungen oder eine grundlegende Verschleierung aktivierst, werden diese Funktionen dein Makro entsprechend aktualisieren. Schließlich wird die Ausgabe in einer CSV-Datei (gespeichert als .txt) abgelegt.
Sobald du die Ausgabedatei von EXCELntDonut hast, öffne die Ausgabedatei in einem Texteditor und kopiere den gesamten Inhalt (Strg-A, Strg-C). Öffne Excel auf einer Windows-VM, klicke mit der rechten Maustaste auf "Tabelle 1" und wähle "Einfügen". Wähle "MS Excel 4.0-Makro". Gehe zu Zelle A1 und füge die Ausgabe von EXCELntDonut ein. Die Daten werden wahrscheinlich alle in einer Spalte eingefügt. Die Daten sind durch Semikolon getrennt ";". Gehe zur Registerkarte "Daten" und klicke dann auf "Text in Spalten". Wähle "Getrennt" und aktiviere auf dem nächsten Bildschirm "Semikolon" und klicke dann auf "Fertigstellen". Das Makro wird auf die entsprechenden Spalten und Zeilen verteilt.
(Hinweis: Wenn du das Flag "--obfuscate" verwendet hast, musst du horizontal etwas scrollen, um deinen eigentlichen Code zu finden, da ein Teil der Verschleierungslogik das Makro in einen zufälligen Abschnitt des Arbeitsblatts verschiebt.)
Wir empfehlen an dieser Stelle zwei Dinge:
Speichere die Datei (.xls) und versuche, sie zu öffnen. Sie sollte deine Payload automatisch ausführen.
Diese Prüfungen basieren auf dem, was echte Bedrohungsakteure in ihrer Malware verwenden.
=FORMULA(D3&D23&D54&D23&D44,E45)
Die FORMULA-Funktion ermöglicht es uns, eine Formel zu platzieren, die später ausgeführt werden kann, in eine andere Zelle. In diesem Fall setzen wir also die Prozessinjektionsanweisungen und verwenden dann die FORMULA-Funktion, um die eigentliche Funktion in eine andere Zelle zu platzieren, die ausgeführt wird. Dies verhindert, dass Verteidiger bei der statischen Analyse Begriffe wie "VirtualAlloc" sehen.
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
test.cs(2,14): error CS0234: The type or namespace name `Management' does not exist in the namespace `System'. Are you missing an assembly reference?
Dieser Fehler bedeutet höchstwahrscheinlich, dass dir bei der Kompilierung mit Mono eine Referenz-Assembly fehlt. Um dies zu beheben, übergib einfach den erwähnten Namespace mit dem Flag -r. In diesem Fall würden wir -r 'System.Management' zur Befehlszeile hinzufügen. Der neue Befehl wäre:
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'