BloodHound: mapear Active Directory y encontrar rutas a Domain Admin
· 10 min de lectura
Aprende qué es BloodHound, cómo recolecta información del dominio, qué consultas responder («¿cuál es la ruta más corta de mi usuario a Domain Admin?»), cómo interpretar las aristas más peligrosas y cómo usarlo también desde el lado defensivo.
En un dominio de Active Directory de una empresa real hay miles de objetos y decenas de miles de relaciones entre ellos: quién pertenece a qué grupo, quién tiene sesión abierta dónde, quién puede modificar qué, quién puede resetear la contraseña de quién. Mantener esa imagen completa en la cabeza es imposible, incluso para los administradores del dominio. Un atacante que la mapeé, en cambio, verá cosas que nadie había notado: cadenas de permisos heredados que llevan desde un becario hasta Domain Admin en cinco saltos.
BloodHound es la herramienta que hizo este trabajo accesible. Modela Active Directory como un grafo y permite preguntarle con una consulta sencilla «¿cuál es la ruta más corta desde mi usuario a Domain Admins?». La respuesta llega en segundos, con cada arista explicada y con guía sobre cómo aprovecharla. Para muchos auditores es la herramienta número uno en dominios Windows, y para los defensores, cada vez más, el espejo que les enseña lo que acaba de descubrir el equipo rojo.
Usa BloodHound solo contra dominios propios o entornos autorizados, como los laboratorios de whoami-labs. Recopilar información de dominios ajenos sin permiso es un delito.
Qué es exactamente#
BloodHound tiene dos partes:
- Recolector (SharpHound en Windows, BloodHound.py en Linux): se conecta al dominio, lee LDAP, SMB, sesiones activas y propiedades de objetos. Produce un conjunto de archivos JSON (o un ZIP).
- Interfaz (BloodHound Community Edition o Legacy): importa esos JSON, los convierte en un grafo Neo4j y ofrece consultas visuales, caminos y reportes.
La idea clave es la representación como grafo: los objetos son nodos (usuarios, grupos, equipos, GPO, OU, dominios) y los permisos y relaciones son aristas con nombres como MemberOf, AdminTo, HasSession, GenericWrite, ForceChangePassword, AllowedToDelegate. Con eso, la pregunta «cómo llego de A a B» es una consulta estándar de grafos: la ruta más corta.

Recolección: SharpHound y BloodHound.py#
SharpHound desde Windows#
Si tienes un equipo Windows en el dominio (o has conseguido ejecutar código en uno), SharpHound es el recolector más completo:
# Recolección estándar: casi todo lo útil
SharpHound.exe -c Default,LoggedOn,Session,Trusts
# Opciones comunes
# -c All → todo (más ruidoso)
# --Stealth → menos puertos tocados, menos información
# --OutputDirectory C:\Temp
Produce un archivo ZIP con varios JSON (usuarios, equipos, grupos, sesiones, GPO…). Ese ZIP se importa en la interfaz.
BloodHound.py desde Linux#
Sin tocar Windows en tu equipo:
# Instalación
pip install bloodhound
# Recolección contra el DC
bloodhound-python -d corp.local -u maria -p Verano2026 -ns IP_DEL_DC -c All --zip
La salida es equivalente: ZIP para importar. --zip es cómodo porque empaqueta todo en uno.
Consejos de recolección#
- La información sobre sesiones activas (quién tiene sesión abierta dónde) es la más valiosa y también la que requiere más privilegios. Sin ella, muchas rutas no aparecen.
- GPO y OU son clave para los permisos heredados; no omitas su colección.
- Recolectar durante un horario de trabajo da el mapa más rico de sesiones; a las 3 de la madrugada verás pocos usuarios conectados.
- No ejecutes SharpHound.exe directamente en producción sin coordinar: los EDR modernos lo detectan al instante.
La interfaz y las consultas preconfiguradas#
Al importar el ZIP, BloodHound ofrece un panel con consultas analíticas prehechas que responden preguntas típicas:
| Consulta | Qué responde |
|---|---|
| Shortest Paths to Domain Admins | Rutas más cortas desde cualquier usuario |
| Shortest Paths from Kerberoastable Users | Qué pueden hacer los usuarios con SPN |
| Shortest Paths from Owned Principals | Si marcas usuarios como «comprometidos», te traza las rutas |
| Find AS-REP Roastable Users | Cuentas con DONT_REQ_PREAUTH |
| Find Workstations where Domain Users can RDP | Estaciones vulnerables al movimiento lateral |
| Find Principals with DCSync Privileges | Quién puede volcar todas las contraseñas del dominio |
Y, por supuesto, consultas libres en Cypher (el lenguaje de Neo4j). Un ejemplo:
MATCH p=shortestPath((n:User {name:"[email protected]"})-[*1..]->(m:Group {name:"DOMAIN [email protected]"})) RETURN p
Aprender un poco de Cypher multiplica lo que puedes extraer. BloodHound CE incluye además una colección cada vez mayor de consultas comunitarias.
Las aristas más peligrosas#
No todas las relaciones valen lo mismo. Estas son las que suelen aparecer en rutas a Domain Admin:
| Arista | Significa | Cómo se abusa |
|---|---|---|
MemberOf | Pertenencia a grupo | Explícito; no requiere acción |
AdminTo | Admin local en el equipo | RCE directo con PsExec/WMI |
HasSession | Hay sesión del usuario en ese equipo | Dumpear LSASS → hash/ticket |
GenericAll | Control total sobre el objeto | Cambiar contraseña, resetear atributos, añadir SPN |
GenericWrite | Escribir atributos | Targeted Kerberoasting, cambiar scriptPath |
WriteOwner | Hacerse dueño del objeto | Luego autoconcederse permisos |
WriteDacl | Modificar la ACL | Autoasignar GenericAll |
ForceChangePassword | Resetear la contraseña | Cambiarla y usarla |
AddMember | Añadir miembros al grupo | Añadirse al grupo privilegiado |
AllowedToDelegate | Delegación Kerberos | Impersonar a cualquier usuario del servicio |
GetChangesAll + GetChanges | DCSync | Volcar todos los hashes del dominio |
Cada arista en la interfaz tiene un botón con un texto didáctico y comandos concretos (de Impacket, Rubeus, etc.) para abusarla. Es la razón por la que BloodHound no solo descubre rutas, también enseña a aprovecharlas.
Cypher para auditores: tres patrones imprescindibles#
Un poco de Cypher convierte BloodHound en una herramienta de investigación casi sin límites. Estos tres patrones cubren el 90% de lo que necesitas:
Buscar usuarios con una propiedad concreta#
MATCH (u:User)
WHERE u.description CONTAINS "pass" OR u.description CONTAINS "clave"
RETURN u.name, u.description
Lista todos los usuarios cuya descripción menciona «pass» o «clave»: es sorprendente la cantidad de contraseñas temporales que aparecen por ahí.
Rutas entre dos conjuntos#
MATCH p=shortestPath(
(n:User {owned: true})-[*1..]->(m:Group {name:"DOMAIN [email protected]"})
)
RETURN p
La ruta más corta desde cualquier usuario marcado como «Owned» a Domain Admins. Ideal al principio de la auditoría cuando ya has comprometido una o varias cuentas.
Objetos con una arista específica#
MATCH p=(u:User)-[:DCSync]->(d:Domain {name:"CORP.LOCAL"})
RETURN p
Todos los usuarios con DCSync sobre el dominio. En un dominio bien gestionado, solo los admins deberían aparecer. Ver a otros es señal de una delegación olvidada.
Dos escenarios prácticos típicos#
Entender qué buscar es tan importante como saber usar la herramienta. Estos son los escenarios que más veces resuelven las auditorías:
De usuario sin privilegios a resetear admin#
Un patrón muy común en empresas con muchas delegaciones: un miembro del grupo «Mesa de Ayuda» (al que se le dio ForceChangePassword sobre cuentas de usuario) resulta tener esa arista también sobre una cuenta que, por accidente de ACL hereditario, está en Account Operators. Resetear la contraseña de esa cuenta te hace Account Operator; desde ahí, modificar cuentas que no están en Protected Users y el salto a DA es cuestión de uno o dos nodos más.
GenericWrite sobre OU con GPO permisiva#
El permiso GenericWrite sobre una OU permite enlazar GPO a esa OU. Si encuentras una OU que contiene equipos Tier 1 y puedes enlazarle una GPO que ejecuta un script, puedes añadir un script que cree un admin local con tu contraseña. Nadie lo nota hasta la próxima aplicación de políticas (minutos u horas), y para entonces ya tienes acceso administrativo sobre todos los equipos que caen bajo esa OU, incluidos los servidores que no debían estar ahí pero que acabaron por una reorganización mal migrada.
BloodHound no solo encuentra la arista: la lista de edges incluye explicaciones didácticas, referencias a técnicas MITRE ATT&CK y comandos listos para usar (en Impacket, Rubeus o PowerView) para cada caso. Esta documentación integrada es parte enorme de su valor pedagógico y la razón por la que reduce tanto la curva de aprendizaje para quien se inicia en Active Directory.
Un flujo típico en un laboratorio#
En un laboratorio autorizado con cuenta de dominio:
- Recolectar con
bloodhound-python -c All. - Importar el ZIP en BloodHound CE.
- Marcar tu usuario como Owned (botón «Mark Owned»).
- Consulta «Shortest Paths from Owned Principals to Domain Admins».
- Estudiar la ruta: cada arista te dice qué técnica aplicar (Kerberoasting, PtH, DCSync, etc.).
- Ejecutar paso por paso con las herramientas sugeridas (Impacket, Rubeus).
- Marcar los nuevos usuarios/equipos comprometidos como Owned y volver a consultar: las rutas se acortan según avanzas.
Este flujo iterativo convierte lo que parecía un laberinto en una secuencia ordenada de pasos concretos.
BloodHound para defensores#

Lo mismo que BloodHound hace para el ataque, sirve para la defensa. Un equipo azul puede:
- Mapear su propio dominio con la misma herramienta y descubrir rutas tóxicas antes que un atacante.
- Eliminar aristas peligrosas: quitar permisos heredados injustificados, limpiar grupos sobreprivilegiados, deshacer delegaciones inseguras.
- Priorizar los cambios: la lista de consultas analíticas indica los riesgos más críticos primero.
- Automatizar recolección periódica: comparar entre ejecuciones muestra qué cambios recientes han abierto nuevas rutas.
En entornos regulados, PingCastle y Purple Knight complementan BloodHound con puntuaciones y métricas más orientadas a reporte ejecutivo; BloodHound queda para el detalle técnico.
Errores comunes#
- Dejar SharpHound en Defender por si acaso. Los EDR actuales lo marcan de inmediato; usa BloodHound.py desde fuera si puedes.
- Recolección incompleta. Sin sesiones y sin GPO, las rutas interesantes no aparecen.
- No marcar los nodos Owned. La herramienta brilla cuando itera desde lo ya comprometido.
- Confiar solo en consultas predefinidas. Cypher da acceso a información imposible de encontrar con el panel por defecto.
- Pensar que es solo ofensivo. Para los defensores es la mejor lupa que existe sobre su propio dominio.
Preguntas frecuentes#
¿BloodHound Community Edition o Legacy?#
CE es la versión activa (basada en la web, con muchas mejoras). Legacy sigue funcionando pero ya no recibe actualizaciones. Para empezar, usa CE.
¿Hace falta un controlador dedicado?#
No. Se puede ejecutar en una VM o incluso en un contenedor Docker en tu equipo. La única necesidad es acceso de red al DC durante la recolección.
¿Qué es Cypher?#
El lenguaje de consultas de Neo4j (la base de datos de grafos que usa BloodHound). Con media docena de patrones típicos ya puedes resolver preguntas más allá del panel.
¿Un atacante puede saber si estoy usando BloodHound contra mi dominio?#
La recolección es ruidosa por diseño (muchas consultas LDAP, muchas conexiones SMB). Los defensores pueden detectarlo si monitorizan el comportamiento del DC. En un laboratorio, nadie se preocupa; en producción, coordina con el equipo de operaciones.
¿Qué significa «marcar Owned»?#
Es una etiqueta que pones sobre un nodo (usuario o equipo) para indicarle a BloodHound que ya lo tienes comprometido. Las consultas que empiezan «from Owned Principals» usan ese estado para calcular caminos desde todo lo que has conquistado hasta los objetivos interesantes.
¿Dónde practico?#
En los laboratorios enlazados al final de esta lección, especialmente aquellos con dominio completo donde BloodHound convierte el enigma en una ruta clara y en un ejercicio didáctico muy visual.
Resumen#
- BloodHound modela Active Directory como un grafo y permite preguntarle las mejores rutas de ataque con consultas simples.
- Dos partes: recolector (SharpHound en Windows, BloodHound.py en Linux) e interfaz (BloodHound CE).
- Las aristas más peligrosas son
AdminTo,HasSession,GenericAll,GenericWrite,WriteDacl,AddMembery permisos de DCSync. - Las consultas predefinidas responden la mayoría de preguntas típicas; Cypher abre el resto.
- Es igual de útil para el equipo defensivo: mapear el dominio propio y eliminar las aristas tóxicas antes que un atacante.