
.NET-Assemblys in einen bestehenden Prozess injizieren
Dieses Tool ist eine Alternative zur traditionellen Fork-and-Run-Ausführung für Cobalt Strike. Der Loader kann in jeden Prozess injiziert werden, einschließlich des aktuellen Beacons. Langlaufende Assemblies werden weiter ausgeführt und senden die Ausgabe zurück an den Beacon, ähnlich wie das Verhalten von execute-assembly.
Es gibt zwei Komponenten von inject-assembly:
BOF-Initialisierer: Ein kleines Programm, das dafür verantwortlich ist, den Assembly-Loader mit allen übergebenen Argumenten in einen entfernten Prozess zu injizieren. Es verwendet BeaconInjectProcess, um die Injektion durchzuführen, was bedeutet, dass dieses Verhalten in einem Malleable-C2-Profil oder mit Prozessinjektions-BOFs (ab Version 4.5) angepasst werden kann.
PIC-Assembly-Loader: Der Hauptteil des Projekts. Der Loader initialisiert die .NET-Laufzeit, lädt die bereitgestellte Assembly und führt sie aus. Der Loader erstellt eine neue AppDomain im Zielprozess, sodass die geladene Assembly nach Abschluss der Ausführung vollständig entladen werden kann.
Die Kommunikation zwischen dem entfernten Prozess und dem Beacon erfolgt über eine Named Pipe. Das Aggressor-Skript generiert einen Pipe-Namen und übergibt ihn dann an den BOF-Initialisierer.
Download und lade das Aggressor-Skript inject-assembly.cna in Cobalt Strike. Danach kannst du Assemblies mit dem folgenden Befehl ausführen:
inject-assembly pid assembly [args...]
Gib 0 als PID an, um die Assembly im aktuellen Beacon-Prozess auszuführen.
Es wird empfohlen, ein weiteres Tool wie FindObjects-BOF zu verwenden, um einen Prozess zu finden, der bereits die .NET-Laufzeit lädt. Dies ist jedoch keine Voraussetzung für die Funktion von inject-assembly.
jobkill trennen.Dieses Projekt wäre ohne die folgenden Projekte nicht möglich gewesen:
Weitere Funktionen und Inspiration wurden aus den folgenden Ressourcen übernommen: