
Cobalt Strike-Aggressor-Skript zum Generieren, Formatieren und Verschlüsseln von Beacon-Shellcode mit Unterstützung für mehrere Exit-Methoden, syscalls und Kodierungs-/Komprimierungstransformationen.
Ryan Stephenson (RCStep)
Fügt Shellcode – Shellcode-Generator zur oberen Menüleiste von Cobalt Strike hinzu

CSSG ist ein Aggressor-, .NET- und Python-Skript, das verwendet wird, um Beacon-Shellcode einfacher zu generieren und zu formatieren.
Generiert stageless Beacon-Shellcode mit offengelegter Exit-Methode, zusätzlicher Formatierung, Verschlüsselung, Kodierung, Komprimierung, mehrzeiliger Ausgabe usw.
Shellcode-Transformationen werden in der absteigenden Reihenfolge durchgeführt, in der sie im Menü aufgeführt sind
Anforderungen:
Die RC4/AES-Verschlüsselungsoption verwendet ein Python-Skript oder eine .NET-Assembly im Ordner /assets.
Die Python-basierte Verschlüsselung benötigt das Paket pycryptodome, um die RC4/AES-Verschlüsselung durchzuführen.
Installieren Sie pycryptodome mit pip, je nach Ihrer Python-Umgebung:
python -m pip install pycryptodome
python3 -m pip install pycryptodome
py -3 -m pip install pycryptodome
py -2 -m pip install pycryptodome
Sie können überprüfen, ob pycryptodome nach der pip-Installation vorhanden ist, mit einem Befehl wie:
python -m pip list | grep crypto
Der Generator verwendet den standardmäßigen 'python'-Befehl Ihres Client-Hosts, um das RC4/AES-Verschlüsselungsskript zu starten.
Ihr Client-Host muss in der Lage sein, native .NET Framework-Assemblys für die RC4/AES .exe-Backend-Option auszuführen.
Optionen für den Shellcode-Generator sind:
Listener:
Wählen Sie mit der Schaltfläche '...' einen gültigen Listener aus. Der Shellcode wird aus dieser Listener-Auswahl generiert.
Bereitstellung:
Stageless (Staged wird für den Shellcode-Generator nicht unterstützt)
Exit-Methode:
process – beendet den gesamten Prozess, in dem sich Beacon befindet, wenn der Beacon geschlossen wird
thread – beendet nur den Thread, in dem Beacon läuft, wenn der Beacon geschlossen wird
Beacon-Syscall-Methode:
none
direct
indirect
Beacon-HTTP-Bibliothek:
wininet
winhttp
Kontrollkästchen "Lokale Zeiger":
Kann verwendet werden, wenn Sie den Shellcode von einem vorhandenen Beacon aus ausführen möchten.
Generiert ein Beacon-Shellcode-Payload, das wichtige Funktionszeiger von einem gleicharchigen Eltern-Beacon erbt.
Vorhandene Sitzung:
Die übergeordnete Beacon-Sitzung, aus der der Shellcode Sitzungsmetadaten abruft.
Der Shellcode sollte innerhalb dieser Beacon-Sitzung ausgeführt werden.
Kontrollkästchen x86:
Aktivieren, um x86-Shellcode zu generieren, x64 wird standardmäßig generiert.
Oder Shellcode-Datei verwenden:
Verwenden Sie eine extern generierte rohe Shellcode-Datei anstelle der Generierung von Beacon-Shellcode.
Dies ermöglicht die Verwendung anderer exportierter Beacon-Dateien oder Ausgaben anderer Tools (Donut, msfvenom usw.).
Formatierung:
raw – rohe binäre Shellcode-Ausgabe, keine Formatierung angewendet
hex – hexadezimal formatierte Shellcode-Ausgabe
0x90,0x90,0x90 – Shellcode formatiert als C#-artiges Byte-Array
0x90uy;0x90uy;0x90uy – Shellcode formatiert als F#-artiges Byte-Array
\x90\x90\x90 – Shellcode formatiert als C/C++-artiges Byte-Array
UUID – Shellcode mit einem Python-Skript in UUID-Strings umgewandelt (mit \x90s für 16-Byte-Blöcke aufgefüllt)
b64 – Option, den Shellcode früh im Generierungsprozess (vor jeglicher Verschlüsselung) base64 zu kodieren
Kontrollkästchen "XOR Shellcode verschlüsseln":
Aktivieren, um den Shellcode XOR zu verschlüsseln (es kann jeweils nur ein Verschlüsselungstyp ausgewählt werden).
XOR-Schlüssel:
Zufällig generierte und bearbeitbare XOR-Schlüsselzeichen zur Verschlüsselung.
Mehrere Zeichen führen zu mehreren Runden der XOR-Verschlüsselung (z. B. ABCDE).
Kontrollkästchen "RC4 Shellcode verschlüsseln":
Aktivieren, um den Shellcode RC4 zu verschlüsseln (es kann jeweils nur ein Verschlüsselungstyp ausgewählt werden).
Verwendet ein Python-Skript oder eine .NET Framework-Assembly zur RC4-Verschlüsselung.
Kontrollkästchen "AES Shellcode verschlüsseln":
Aktivieren, um den Shellcode AES zu verschlüsseln (es kann jeweils nur ein Verschlüsselungstyp ausgewählt werden).
Verwendet ein Python-Skript oder eine .NET Framework-Assembly zur AES-Blockchiffre-AES-CBC-Verschlüsselung.
Shellcode wird mit \0-Werten aufgefüllt, um die Blockgrößenanforderungen zu erfüllen.
Ein zufällig generierter IV wird den verschlüsselten Shellcode-Daten vorangestellt.
Kontrollkästchen "RC4/AES-Backend":
Aktivieren, um eine .NET-EXE-Assembly zur Verschlüsselung Ihrer Shellcode-Datei zu verwenden.
Deaktiviert verwendet ein Python-Skript zur Verschlüsselung Ihrer Shellcode-Datei.
Akzeptierte Schlüssellängen für AES sind 16, 24 und 32 Byte.
Schlüssellängen für RC4 sind bei Verwendung von .NET BELIEBIG und bei Verwendung von Python mindestens 5 Byte.
RC4/AES-Backend-Tools:
Ein Python-Skript und eine kompilierte .NET-Assembly befinden sich im Assets-Verzeichnis.
Das Quellverzeichnis für die Encryptor-Assembly befindet sich ebenfalls dort, für die Selbstkompilierung, falls Sie mir nicht vertrauen (ich würde es auch nicht tun).
Beide Tools können RC4/AES-Shellcode/-Dateien verschlüsseln und entschlüsseln.
Verwendung von encrypt_file.py:
encrypt_file.py [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
Verwendung von Encryptor.exe:
Encryptor.exe [aes/rc4] [encrypt/decrypt] [key] [input file] [output file]
RC4- oder AES-Schlüssel
Zufällig generierter und bearbeitbarer RC4/AES-Schlüssel zur Verschlüsselung.
Ein 32-Byte-AES-Schlüssel wird generiert und für 256-Bit-AES-Verschlüsselungsstärke bevorzugt.
Akzeptierte Schlüssellängen für AES sind 16, 24 und 32 Byte.
RC4-Schlüssellänge ist mindestens 1 Byte bei .NET und mindestens 5 Byte bei Python.
Kodierung/Komprimierung:
none – Keine zusätzliche Kodierung oder Komprimierung des Shellcodes
b64 – Shellcode base64 kodieren
gzip then b64 – gzip komprimieren, dann base64 kodieren
gzip – Shellcode gzip komprimieren
b64 then gzip – base64 kodieren, dann gzip komprimieren
b64 then 7xgzip – base64 kodieren, dann 7-mal gzip komprimieren
Mehrzeilige Ausgabe:
Kann für nicht-rohe/binäre Ausgabeformate verwendet werden.
none – keine mehrzeilige Formatierung, Shellcode ist ein langer String
quoted – Shellcode wird in Zeilen aufgeteilt, die von Anführungszeichen umgeben sind
chunks.push_back – Shellcode wird in Zeilen aufgeteilt, die von chunks.push_back(" und "); umgeben sind
Mehrzeilige Länge:
Anzahl der Shellcode-Zeichen in jeder Zeile, wenn eine mehrzeilige Ausgabeoption ausgewählt ist.
Schaltfläche "Generieren":
Wählen Sie ein Verzeichnis für die Shellcode-Ausgabe.
Der Standarddateiname ist beacon, kann aber geändert werden.
Alle verwendeten Verschlüsselungsschlüssel werden in einem Popup angezeigt und auch in die Cobalt Strike Script-Konsole geschrieben.
Die Byte-Größe des rohen Beacon-Shellcodes und des endgültig formatierten Beacon-Shellcodes wird in einem Popup angezeigt und auch in die Script-Konsole geschrieben.
Der Speicherort der zum Generieren/Erstellen des Shellcodes verwendeten Dateien ist alle in der Datei scripts/shellcode_generator.cna festgelegt.
Inspiriert von der Arbeit vieler Infosec-Mitwirkender