
Tu herramienta de acompañante de terminal de BloodHound basada en plantillas

Una aplicación de terminal Python3 que contiene consultas Neo4j para conjuntos de datos de BloodHound con un script para automatizar su importación en BloodHound CE.
Terminal

Informe HTML

Informe HTML (continuación)

BloodHound es una herramienta fundamental para todo probador de penetración. Sin embargo, tiene algunos efectos secundarios negativos debido a su diseño. Cubriré los mayores puntos débiles que he experimentado y lo que esta herramienta pretende abordar:
JSON exportados, necesito los resultados del gráfico en un formato línea por línea en un archivo .txt para realmente atacar cosas desde otras herramientasEsta herramienta puede proporcionar un valor significativo tanto para equipos rojos como azules.
¡Recupera el control de tus datos de BloodHound con CypherHound!
grep/cut/awkcustomqueries.json de BloodHound Legacy a BloodHound CE incluidoAsegúrate de tener python3 instalado y ejecuta:
python3 -m pip install -r requirements.txt
Inicia el programa con: python3 cypherhound.py -c config.json -y queries.yaml
El programa leerá un archivo de configuración en formato json. A continuación se muestra un ejemplo de este archivo:
{
"user": "neo4j",
"pwd": "password",
"database": "neo4j"
}
donde:
user es tu nombre de usuario de Neo4jpwd es tu contraseña de Neo4jdatabase es tu base de datos de Neo4jEl programa lee consultas de un archivo YAML en el siguiente formato. Se ha proporcionado ad-queries.yaml como ejemplo que contiene consultas relacionadas con Active Directory. msg_template no es necesario para consultas de caminos más cortos, pero deben devolver la variable que contiene el camino
queries:
- group: general
desc: List all AddKeyCredentialLink privileges for owned principals
cypher: |-
MATCH (n {owned: true})-[r:AddKeyCredentialLink]->(m)
RETURN n.name AS n_name, m.name AS m_name, labels(m) AS labels_m, labels(n) AS labels_n
ORDER BY n.name
msg_template: |-
{{ n_name }} ({{ labels_n[0] }}/{{ labels_n[1] }}) has AddKeyCredentialLink over {{ m_name }} ({{
labels_m[0] }}/{{ labels_m[1] }})
A continuación se muestra una tabla de desglose de los pares clave/valor:
| Clave | Descripción |
|---|---|
group | El grupo al que pertenece esta consulta, los grupos son definidos por el usuario, ej. "general" |
desc | La descripción de la consulta |
cypher | La consulta en sí en formato Neo4j |
msg_template | Plantilla Jinja2 para la salida de terminal basada en variables de consulta, usa alias para las variables de Neo4j para evitar que Jinja intente renderizar como variables anidadas |
params.*)El programa utiliza Jinja2 para renderizar Cypher. Define parámetros de ejecución con el comando set y haz referencia a ellos en YAML como {{ params.<key> }}.
CLI
set <key> <value...> # e.g., set user [email protected]
unset <key> # optional
show # optional
Ejemplo YAML
- group: user
desc: List all privileges for this user
cypher: |-
MATCH (n:User)-[r]->(m)
WHERE n.name =~ '((?i){{ params.user }})'
RETURN n.name AS n_name, TYPE(r) AS rel_type, labels(m) AS labels_m, m.name AS m_name
ORDER BY TYPE(r)
msg_template: |-
User {{ n_name }} has {{ rel_type }} over {{ m_name }} ({{ labels_m[0] }}/{{ labels_m[1] }})
Patrones de Parámetros Comunes
| Clave de parámetro | Valor de ejemplo | Uso en Cypher |
|---|---|---|
params.user | [email protected] | = {{ params.user }} |
params.user_regex | (?i)john\.doe(@example\.com)? | =~ '{{ params.user_regex }}' |
params.group | Domain [email protected] | = {{ params.group }} |
params.prefix | ACME- | STARTS WITH {{ params.prefix }} |
Este repositorio proporciona un script query-importer.py para automatizar la importación de consultas en la UI de BloodHound CE desde un archivo JSON. También se ha proporcionado bh_query_converter.py para convertir un archivo YAML destinado a la aplicación de terminal al formato JSON esperado por query-importer.py y BloodHound CE. A continuación se muestra un ejemplo del formato JSON requerido: