Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
EXCELntDonut — Excel 4.0 (XLM) Makro-Generator zum Injizieren von DLLs und EXEs in den Speicher. | Kitploit
Tools/GitHubGitHub/redsiege/excelntdonut
Phishing-ToolsPayload-GenerierungExploitationShellcodePhishingRed TeamingShellcode-Generierung
GitHubredsiege/excelntdonut

EXCELntDonut

Excel 4.0 (XLM) Makro-Generator zum Injizieren von DLLs und EXEs in den Speicher.

Repository anzeigen
51789vor 5 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| 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.

Installation

root@kitploit:~
chmod +x install.sh
./install.sh

Was wird installiert?

  • pip3
  • mono-complete (sowohl mcs als auch alle möglichen Bibliotheken, die du in deinen Quelldateien referenzieren könntest)
  • EXCELntDonut als CLI

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.

Verwendung

root@kitploit:~
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. 

Funktionsweise

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.

So erstellst du ein XLM-Makro (Excel 4.0)

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:

  1. Finde die Startzelle (das wird die oberste linke Zelle deines Makrocodes sein, wahrscheinlich A1). Klicke mit der rechten Maustaste und wähle "Ausführen". Teste dein Makro, um sicherzustellen, dass es funktioniert.
  2. Sobald du bestätigt hast, dass das Makro funktioniert, wähle erneut dieselbe oberste linke Zelle aus. Auf der linken Seite des Bildschirms sollte ein Dropdown-Menü sein, das die Zelle anzeigt, in der du dich befindest (wahrscheinlich "A1"). Klicke in das Dropdown-Menü und ändere den Textwert in "Auto_open". Dadurch wird dieselbe automatische Ausführungsfunktionalität erzeugt, die du von VBA-Makros kennst.

Speichere die Datei (.xls) und versuche, sie zu öffnen. Sie sollte deine Payload automatisch ausführen.

Sandbox-Prüfungen

Diese Prüfungen basieren auf dem, was echte Bedrohungsakteure in ihrer Malware verwenden.

  1. Ist eine Maus aktiv?
  2. Ist die Bildschirmgröße größer als 770 Pixel Breite und 381 Pixel Höhe?
  3. Kann der Host Töne abspielen?
  4. Ist dies ein Windows-Rechner?

Verschleierung

  1. Für die Prozessinjektionsanweisungen (VirtualAlloc, WriteProcessMemory, CreateThread) und Sandbox-Prüfungen werden alle Makrofunktionen in die folgende Struktur umgewandelt:
root@kitploit:~
=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.

  1. Das gesamte Makro wird um einen bestimmten Wert nach rechts verschoben, sodass das Blatt mit den Makros beim ersten Öffnen leer erscheint.

Wissenswertes

  • Weniger ausgefeilte Payloads verwenden einfach den Befehl =EXEC(), um Befehle auszuführen. Einige verwenden auch URLMON, um Dateien herunterzuladen. Andere Dateien enthalten sogar das Wort "SHELL". Das alles schien uns eine schlechte Idee zu sein. Dieses Tool enthält nichts davon. Stattdessen injiziert es deinen C#-Quellcode in den Excel-Prozess (entweder 32-Bit oder 64-Bit) und führt ihn dann aus. Danach liegt es an deiner Payload, was als Nächstes passiert.

Tipps

  • Dein C#-Quellcode kann alles tun, was du möchtest. Wir empfehlen, dass dein Quellcode die Parent-Child-Beziehung zwischen Excel und dem, was du startest, unterbricht.
  • Es gibt viele gute Blogbeiträge über "sehr verborgene" Excel-Blätter. Ziehe in Betracht, dies zu nutzen.
  • Vergiss nicht, deine Excel-Datei realistisch aussehen zu lassen.

Fehlerbehebung

"Der Typ oder Namespace ... ist nicht vorhanden ..."
root@kitploit:~
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@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'

"Metadatendatei ... konnte nicht gefunden werden"
root@kitploit:~
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
error CS0006: Metadata file `System.Management' could not be found

[x] Error in generating x86 .NET assembly using MCS. See error message above.

Dieser Fehler sollte nur auftreten, wenn du EXCELntDonut ohne das Bash-Skript install.sh ausführst. In diesem Fall musst du mono-complete manuell installieren. Dadurch werden die relevanten Abhängigkeiten heruntergeladen. Du kannst es mit apt so installieren:

root@kitploit:~
apt-get install mono-complete
"Programm ... enthält keine statische 'Main'-Methode ..."
root@kitploit:~
root@kali:~/Desktop# EXCELntDonut -f test.cs
 _______  ______ _____ _           _   ____                    _   
| ____\ \/ / ___| ____| |    _ __ | |_|  _ \  ___  _ __  _   _| |_ 
|  _|  \  / |   |  _| | |   | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ /  \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_ 
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
                    by @JoeLeonJr (@FortyNorthSec)                
[i] Generating your x86 .NET assembly.
error CS5001: Program `_excelntdonut_GJAoNuVPMcX.exe' does not contain a static `Main' method suitable for an entry point

[x] Error in generating x86 .NET assembly using MCS. See error message above.

Derzeit erlaubt EXCELntDonut nur C#-Dateien mit Payloads in der Main-Funktion.

Allgemeine Ratschläge zur Fehlerbehebung
  1. Kompiliere zunächst deinen C#-Quellcode mit csc unter Windows und führe ihn aus, um zu überprüfen, ob die Payload funktioniert. Teste dies, indem du sowohl x86- als auch x64-Payloads kompilierst, da du wahrscheinlich nicht weißt, ob deine Zielumgebung 32-Bit- oder 64-Bit-Excel verwendet.
  2. Du solltest deine Payload mehrmals im selben Prozess ausführen können. Wenn jedoch seltsame Fehler auftreten, beende Excel, öffne es erneut und versuche es noch einmal.
  3. Wenn du dir unsicher bist, schließe Excel und erstelle eine neue Datei zum Testen.

Erkennung

  • Hier sind einige Yara-Regeln von @InQuest als Einstieg:

    Suche nach einem sehr versteckten Blatt

    https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule

    Suche nach dem String Auto_Open

    https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar

Es gibt viele Beiträge zur Verwendung von OLEDUMP.py zur Analyse von XLM-Dateien. Betrachte diesen hier:

https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/

Verteidigung

  1. Aktiviere die GPO-Blockierung der Makroausführung für aus dem Internet heruntergeladene Dateien. Siehe - https://www.microsoft.com/security/blog/2016/03/22/new-feature-in-office-2016-can-block-macros-and-help-prevent-infection/
  2. AMSI hilft hier leider nicht.
  3. ASR-Regeln... wir sind uns nicht sicher.
  4. Die meisten Benutzer senden heutzutage .xlsx-Dateien. Vielleicht blockiere .xls-Dateien, die an die Postfächer deiner Mitarbeiter gesendet werden. Es wäre nicht unzumutbar, jemanden zu bitten, eine als .xlsx gespeicherte Datei erneut zu senden.
  5. Die neueste Version von Defender ATP hat die unverschleierte Version dieser Datei beim Speichern auf der Festplatte erkannt.

Danksagungen

Dies wäre nicht einmal auf unserem Radar gewesen ohne die fantastische Arbeit der Leute bei Outflank (@outflanknl). Besonderer Dank gilt @StanHacked für seine Einsichten während dieses Projekts. Ebenso wäre dieses Projekt ohne Donut (von @TheWover und @odzhan) und die dazugehörige Python-Bibliothek (von @byt3bl33d3r) nicht möglich gewesen. Im Zusammenhang damit hat das Team von Accenture CLRvoyance entwickelt, das einige x64-Probleme gelöst hat, die wir mit Donut + XLM 4.0-Makros nicht beheben konnten. Schließlich danken wir Philip Tsukerman von Cybereason für die großartige Forschung zur Kompatibilität von XLM-Makros mit 64-Bit-Versionen von Excel.

Haftungsausschluss

Wir sind nicht verantwortlich für den Missbrauch dieses Tools. Dieses Tool wurde zu Bildungszwecken und für autorisierte Tests erstellt, um zu demonstrieren, wie C#-Quellcode mithilfe eines XLM-Makros (Excel 4.0) in den Arbeitsspeicher injiziert werden kann. Das ultimative Ziel dieses Projekts ist es, (1) Red Teams eine weitere Phishing-Payload-Option zu bieten, um zu emulieren, was echte Gegner derzeit verwenden, und (2) Verteidigern einen Bezugsrahmen für den Aufbau von Analysen und Abwehrmaßnahmen zu geben. Ohne ein Tool zur schnellen Generierung dieser Art von Payload glauben wir, dass Verteidiger nicht angemessen auf das vorbereitet sein werden, was tatsächlich auf sie zukommt. Bitte handele verantwortungsvoll.

Lizenz

Bitte siehe die Lizenzdatei in diesem Ordner. Beachte, dass dieses Tool zwei andere Open-Source-Tools enthält: Donut und CLRvoyance.

Tool herunterladen