
Una shell interactiva de línea de comandos para la API de BloodHound.
Un shell interactivo de línea de comandos para BloodHound. Busca objetos de Active Directory, detecta debilidades y encuentra rutas de ataque desde la terminal, sin abrir la interfaz web.
Requiere Python 3.11+ y un servidor BloodHound CE v9 (probado en v9.7.1).
pipx install bhshell # recommended
# or
pip install bhshell
$ bhshell --url http://127.0.0.1:8080
[bh: shell] > login -u admin
[+] Logged in as admin on 127.0.0.1:8080
[bh: shell] > hunt
Severity Check Count Example Description
critical dcsync 4 [email protected] Non-Tier-Zero principals with replication rights
critical adcs 95 [email protected] AD CS escalation paths (ESC*, GoldenCert)
high kerberoastable 2 [email protected] Kerberoastable users
...
[*] Details: 'hunt CHECK' (e.g. 'hunt dcsync'), or 'hunt --all'.
[bh: shell] > user PHANTOM\svc_kerb_del --all -o svc_kerb_del.csv
[bh: shell] > ou phantom.corp -t
[bh: shell] > computer DF-MS-SHS -G
[bh: shell] > gpo 'ENABLE [email protected]' -c
[bh: shell] > path --owned -g
Los mismos comandos se ejecutan de forma no interactiva para scripting: bhshell -c "hunt --json" > hunt.json.
| Comando | Muestra |
|---|---|
user, computer, group, lookup | Objetos Kerberoastables / AS-REP roastables, delegación, antigüedad de contraseñas, indicadores Tier Zero y owned, además de anidamiento de grupos, control de ACL entrantes/salientes, sesiones y derechos de administrador local |
ou | OUs, contenedores y dominios completos: el árbol de OUs con recuentos de objetos, Tier Zero y owned, cada objeto bajo una OU, las GPO que se aplican (enlaces forzados, herencia bloqueada) y quién fuera de Tier Zero puede editarlas, y quién controla la OU; user/computer -G muestra las GPO aplicadas a un objeto. Las OUs con el mismo nombre se seleccionan por distinguished name |
gpo | Dónde está vinculada una GPO, los usuarios y equipos a los que se aplica (teniendo en cuenta la herencia bloqueada y los enlaces forzados) y quién fuera de Tier Zero puede editarla |
ca, template | CAs empresariales y plantillas de certificados: las condiciones ESC que cumple una plantilla (incluidas ESC2 y ESC15, para las que BloodHound no tiene arista), el host y la configuración de la CA (ESC6, ESC8), y quién puede inscribirse, gestionarlas (ESC7) o reescribirlas (ESC4) |
search | Objetos que coinciden con filtros de propiedades (search -t user hasspn enabled), con fechas, antigüedades (90d) y comodines |
path | Rutas más cortas hacia un objetivo o hacia Tier Zero, desde todo lo owned, o mediante pasos --via; impresas como cadenas de saltos, un grafo de terminal, o SVG/PNG para informes |
hunt | Comprobaciones a nivel de dominio por severidad: DCSync, control de Tier Zero, AD CS (ESC*), Kerberoasting, sesiones privilegiadas, lectores de LAPS/gMSA, contraseñas en atributos o aún con su valor por defecto (equipos pre-Windows 2000, cuentas sin uso, cuentas de administrador con un gemelo estándar), primitivas de toma de control (Shadow Credentials, RBCD), control de GPO, relay NTLM, trusts, posibles honeytokens...; hunt --owned las limita a lo que pueden hacer tus objetos owned |
cypher, query | Cypher en bruto, y una biblioteca de consultas guardadas: incluidas, tus propios archivos .cyp (~/.bhshell/queries/ o cualquier carpeta configurada con config query_dirs) y las guardadas en el servidor |
owned, hvt | Marcar o desmarcar objetos owned y Tier Zero, por nombre o desde un archivo de nombres |
domains, trusts | Recuentos por dominio, y el mapa de trusts con el estado del filtrado de SID |
Para añadir tu propia consulta, guárdala como un archivo .cyp en ~/.bhshell/queries/ y ejecútala por nombre:
$ cat ~/.bhshell/queries/stale-admins.cyp
// description: Enabled adminCount users who have not logged on for a year
MATCH (u:User) WHERE u.admincount = true AND u.enabled = true
AND u.lastlogontimestamp < (datetime().epochseconds - 31536000) RETURN u
[bh: shell] > query run stale-admins -o stale-admins.csv
Consulta la biblioteca de consultas para conocer el formato y para mantener las consultas en otras carpetas (un repositorio de equipo, una carpeta por encargo).
La mayoría de los comandos aceptan --json y -o FILE (JSON o CSV), y los que listan objetos también aceptan
--names-only o -o FILE.txt para obtener una lista simple de nombres que pasar a otras herramientas. El inicio de sesión funciona con una contraseña (más MFA) o
con un token de API; los secretos se solicitan o se leen del entorno, nunca se pasan como argumentos.
La guía de uso completa (cada comando, flag de vista, filtro de búsqueda, opción de ruta, comprobación de hunt y
ajuste de configuración) está en docs/USAGE.md.
Dentro del shell, ejecuta help o help <command>.
Los informes de errores y las pull requests son bienvenidos en github.com/kr0no/bloodhound-shell/issues.
git clone https://github.com/kr0no/bloodhound-shell.git
cd bloodhound-shell
python3 -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
pre-commit install
python -m pytest
Sin un servidor, pytest ejecuta solo las pruebas offline. El resto se ejecuta contra una instancia de BloodHound CE
cargada con los datos de ejemplo:
export BHSHELL_TEST_URL=http://127.0.0.1:8080 BH_USER=admin BH_PASSWORD='...'
python -m pytest -m live
Solo leen del servidor y nunca tocan ~/.bhshell.
Distribuido bajo la Licencia MIT. Consulte LICENSE para más detalles.
BloodHound es una marca registrada de SpecterOps. bhshell es un proyecto independiente y no está afiliado ni respaldado por SpecterOps.