
Führen Sie nicht verwaltete Windows-Executables in CobaltStrike Beacons aus.
Inline-Execute-PE ist eine Sammlung von Beacon Object Files (BOFs) und einem dazugehörigen Aggressor-Skript für CobaltStrike, das es Operatoren ermöglicht, nicht verwaltete Windows-Executables in den Beacon-Speicher zu laden und auszuführen, die Ausgabe abzurufen und in der Beacon-Konsole anzuzeigen.
Dies ermöglicht es Operatoren, viele Tools von Drittanbietern (Mimikatz, Dsquery, Sysinternals-Tools usw.) zu verwenden, ohne sie auf die Festplatte schreiben, mit einem Tool wie Donut in positionsunabhängigen Code umwandeln oder einen neuen Prozess erstellen zu müssen, um sie auszuführen.
Diese Executables werden in den Beacon-Speicher gemappt, sodass sie wiederholt ausgeführt werden können, ohne sie jedes Mal über das Netzwerk senden, neuen Speicher allozieren und einen neuen conhost.exe-Prozess erstellen zu müssen.
In Beacons geladene Executables sind für alle CobaltStrike-Clients, die mit dem CobaltStrike-Team-Server verbunden sind, zugänglich und können von ihnen ausgeführt werden.
Inline-Execute-PE wurde für x64-Beacons und x64-Windows-C- oder C++-Executables entwickelt, die mit Mingw oder Visual Studio kompiliert wurden. Dieses Projekt unterstützt keine x86-Executables oder x64-Executables, die in einer anderen Sprache geschrieben oder mit einem anderen Compiler kompiliert wurden.

Klonen Sie das Repository und führen Sie optional make aus, um die BOFs neu zu kompilieren.
Laden Sie Inline-Execute-PE.cna in den CobaltStrike-Client. Stellen Sie sicher, dass das Verzeichnis, aus dem CobaltStrike ausgeführt wird, von Ihrem Benutzer beschreibbar ist; Inline-Execute-PE erstellt dort eine Textdatei (petable.txt), um die Verfügbarkeit der für die Funktion von Inline-Execute-PE erforderlichen Daten sicherzustellen.
Inline-Execute-PE umfasst 3 zielgerichtete Befehle, die BOFs ausführen, und 3 interne Befehle, die die Projektdatenstruktur manipulieren:
Auf das Ziel ausgerichtet:
Interne Datenstruktur:
peload ist der Beginn von Inline-Execute-PE. Dieser Befehl wird verwendet, um ein PE in den Beacon-Speicher zu laden. Er führt die folgenden Hauptaktionen aus:
perun ist der zweite Schritt in Inline-Execute-PE. Er führt die folgenden Hauptaktionen aus:
peunload wird aufgerufen, um das PE aus dem Beacon-Speicher zu entfernen, wenn ein Operator damit fertig ist oder ein anderes PE laden möchte. Es führt die folgenden Hauptaktionen aus:
petable wird verwendet, um Informationen zu allen aktuell in Beacons geladenen PEs anzuzeigen.
Jeder CobaltStrike-Client hat seine eigene petable; Inline-Execute-PE unternimmt große Anstrengungen, um die Synchronität seiner Daten zwischen allen verbundenen CobaltStrike-Clients sicherzustellen, damit PEs von allen Operatoren verwendet werden können. Weitere Informationen hierzu finden Sie unter "Design Considerations and Commentary".

peconfig wird verwendet, um Optionen zu konfigurieren, die die Funktionsweise von Inline-Execute-PE betreffen. Die beiden aktuell änderbaren Optionen sind:
pebroadcast kann verwendet werden, um den Inhalt der petable eines Clients manuell an alle anderen verbundenen CobaltStrike-Clients zu senden.
Jeder andere CobaltStrike-Client wird seine petable mit den gesendeten Daten aktualisieren. Dies sollte eigentlich nie notwendig sein, aber die Funktion existiert für den Fall der Fälle.
Verwenden Sie peload, um ein PE in den Beacon-Speicher zu laden

Alternativ, wenn sich auf dem Zielcomputer ein PE befindet, das Sie ohne Erstellen eines neuen Prozesses verwenden möchten, geben Sie den Pfad und den --local-Schalter an

Rufen Sie perun auf und übergeben Sie Argumente an das geladene PE

Anführungszeichen in Argumenten müssen mit Backslashes maskiert werden

Wenn Sie festgestellt haben, dass ein PE Probleme verursacht, wenn während des Entladens versucht wird, DLLs freizugeben, verwenden Sie peconfig, um unloadlibraries auf false zu setzen
