
Sua ferramenta de terminal companheira baseada em modelos para BloodHound

Uma aplicação de terminal em Python3 que contém cyphers Neo4j para conjuntos de dados do BloodHound com um script para automatizar a importação deles no BloodHound CE.
Terminal

Relatório HTML

Relatório HTML (continuação)

O BloodHound é uma ferramenta essencial para todo tester de penetração. No entanto, existem alguns efeitos colaterais negativos baseados no seu design. Abordarei os maiores pontos problemáticos que experimentei e o que esta ferramenta pretende resolver:
JSON exportados, preciso de resultados de grafos num formato linha a linha .txt para realmente atacar coisas a partir de outras ferramentasEsta ferramenta pode fornecer um valor significativo tanto para equipas vermelhas como azuis.
Retome o controlo dos seus dados BloodHound com o CypherHound!
grep/cut/awkcustomqueries.json do BloodHound Legacy para o BloodHound CE incluídoCertifique-se de ter o python3 instalado e execute:
python3 -m pip install -r requirements.txt
Inicie o programa com: python3 cypherhound.py -c config.json -y queries.yaml
O programa lerá um ficheiro de configuração no formato json. Um exemplo deste ficheiro é mostrado abaixo:
{
"user": "neo4j",
"pwd": "password",
"database": "neo4j"
}
onde:
user é o seu nome de utilizador Neo4jpwd é a sua palavra-passe Neo4jdatabase é a sua base de dados Neo4jO programa lê consultas de um ficheiro YAML no formato abaixo. O ficheiro ad-queries.yaml foi fornecido como exemplo contendo consultas relacionadas com o Active Directory. msg_template não é necessário para consultas de caminhos mais curtos, mas estas devem retornar a variável que contém o caminho
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] }})
Uma tabela com a descrição dos pares chave/valor pode ser vista abaixo:
| Chave | Descrição |
|---|---|
group | O grupo a que esta consulta pertence, os grupos são definidos pelo utilizador, ex: "general" |
desc | A descrição da consulta |
cypher | A consulta em si no formato Neo4j |
msg_template | Template Jinja2 para a saída do terminal baseado nas variáveis do cypher, use aliases para as variáveis do Neo4j para evitar que o Jinja tente renderizar como variáveis aninhadas |
params.*)O programa usa Jinja2 para renderizar o Cypher. Defina parâmetros em tempo de execução com o comando set e faça referência a eles no YAML como {{ params.<chave> }}.
CLI
set <chave> <valor...> # ex: set user [email protected]
unset <chave> # opcional
show # opcional
Exemplo 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] }})
Padrões Comuns de Parâmetros
| Chave do parâmetro | Exemplo de valor | Uso no 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 repositório fornece um script query-importer.py para automatizar a importação de consultas na interface do BloodHound CE a partir de um ficheiro JSON. O ficheiro bh_query_converter.py também foi fornecido para converter um ficheiro YAML destinado à aplicação de terminal para o formato JSON esperado pelo query-importer.py e pelo BloodHound CE. Um exemplo do formato JSON necessário pode ser visto abaixo: