Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
cypherhound — あなたのテンプレートベースのBloodHoundターミナルコンパニオンツール | Kitploit
ツール/GitHubGitHub/fin3ss3g0d/cypherhound
偵察情報収集ペネトレーションテストユーティリティとフレームワーク
GitHubfin3ss3g0d/cypherhound

cypherhound

あなたのテンプレートベースのBloodHoundターミナルコンパニオンツール

リポジトリを見る
45436509ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CypherHound

ロゴ

Python3 製のターミナルアプリケーションで、Neo4j 用の BloodHound データセット向けサイファーと、それらを BloodHound CE に自動インポートするスクリプトを提供します。

出力サンプル

ターミナル

デモ

HTML レポート

レポートサマリー

HTML レポート(続き)

詳細サンプル

なぜ?

BloodHound は全てのペネトレーションテスターにとって欠かせないツールです。しかし、その設計に起因するいくつかの副作用があります。ここでは私が経験した最大の痛点と、このツールが解決しようとしている点を挙げます:

  1. 私のツールはリストで考える – ツールがエクスポートされた JSON グラフを解析するまでは、他のツールから実際に攻撃するために、グラフ結果を行単位の .txt ファイル形式で必要とします。
  2. グラフ結果のコピー&ペースト – これは1つ目に関連しますが、本当に説明が必要でしょうか?
  3. グラフが大きすぎて描画できない – 大規模な AD 環境、同じグラフ上に複数の最短経路が描画される場合など。あらゆるグラフに含まれる情報は攻撃者の目的に役立ち、全てのデータを効率的に表示できる必要があります。
  4. カスタムサイファーを手動で実行するのは時間がかかる – 自動化しましょう :)

このツールは、レッドチームとブルーチームの両方に大きな価値を提供します。

機能

CypherHound で BloodHound データの制御を取り戻しましょう!

  • YAML ファイルからサイファーテンプレートを読み込み
    • ユーザー入力(ユーザー、グループ、コンピューター固有)に基づいて検索するサイファーを設定
    • ユーザー定義の正規表現サイファー
  • 全結果のユーザー定義エクスポート
    • grep/cut/awk で扱いやすい形式の例を提供
    • 任意のサイファー組み合わせをモダンで洗練された HTML レポートとしてエクスポート
  • BloodHound CE GUI から同じクエリを実行
    • YAML → JSON コンバーターと自動 BloodHound CE クエリインポーター
    • BloodHound Legacy customqueries.json から BloodHound CE へのインポータースクリプト付属

インストール

python3 がインストールされていることを確認し、次のコマンドを実行します:

python3 -m pip install -r requirements.txt

使い方

プログラムを起動: python3 cypherhound.py -c config.json -y queries.yaml

config.json

プログラムは json 形式の設定ファイルを読み込みます。ファイルの例を以下に示します:

{
    "user": "neo4j",
    "pwd": "password",
    "database": "neo4j"
}

ここで:

  • user は Neo4j のユーザー名
  • pwd は Neo4j のパスワード
  • database は Neo4j のデータベース名

YAML 形式

プログラムは以下の形式の YAML ファイルからクエリを読み取ります。ad-queries.yaml が Active Directory 関連のクエリを含む例として提供されています。最短経路クエリには msg_template は必須ではありませんが、パスを含む変数を返す必要があります。

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] }})

キーと値のペアの内訳は以下の表の通りです:

キー説明
groupこのクエリが属するグループ。グループはユーザー定義(例:"general")
descクエリの説明
cypherNeo4j形式のクエリ本文
msg_templateサイファー変数に基づくターミナル出力用のJinja2テンプレート。Neo4j変数にはエイリアスを使用し、Jinjaがネスト変数としてレンダリングしようとするのを防ぐ

サイファー内の動的パラメータ(Jinja2 params.*)

プログラムはサイファーレンダリングに Jinja2 を使用します。set コマンドで実行時パラメータを定義し、YAML 内で {{ params.<key> }} として参照します。

CLI

set <key> <value...> # 例: set user [email protected]
unset <key> # 任意
show # 任意

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] }})

共通パラメータパターン

パラメータキー値の例サイファー内での使用法
params.user[email protected]= {{ params.user }}
params.user_regex(?i)john\.doe(@example\.com)?=~ '{{ params.user_regex }}'
params.groupDomain [email protected]= {{ params.group }}
params.prefixACME-STARTS WITH {{ params.prefix }}

JSON 形式

このリポジトリには、JSON ファイルから BloodHound CE UI へのクエリインポートを自動化する query-importer.py スクリプトが含まれています。また、ターミナルアプリケーション向けの YAML ファイルを query-importer.py および BloodHound CE が期待する JSON 形式に変換する bh_query_converter.py も提供されています。必要な JSON 形式の例を以下に示します:

{
  "queries": [
    {
      "name": "List all AddKeyCredentialLink privileges for owned principals",
      "description": "List all AddKeyCredentialLink privileges for owned principals - General",
      "query": "MATCH p=(n {owned: true})-[r:AddKeyCredentialLink]->(m)\nRETURN p\nORDER BY n.name"
    },
    {
      "name": "List all AddKeyCredentialLink privileges for Users, Domain Users, Authenticated Users, and Everyone groups",
      "description": "List all AddKeyCredentialLink privileges for Users, Domain Users, Authenticated Users, and Everyone groups - General",
      "query": "MATCH p=(n:Group)-[r:AddKeyCredentialLink]->(m)\nWHERE (n.objectid =~ \"(?i)S-1-5-21-.*-513\" OR n.objectid =~ \"(?i).*-S-1-5-11\" OR n.objectid =~ \"(?i).*-S-1-1-0\" OR n.objectid =~ \"(?i).*-S-1-5-32-545\")\nRETURN p\nORDER BY n.name"
    }
  ]
}

コマンド

完全なコマンドメニューを以下に示します:

Documented commands (use 'help -v' for verbose/'help <topic>' for details):
======================================================================================================
alias                 Manage aliases
clear                 Clear the terminal.
cls                   Clear the terminal.
edit                  Run a text editor and optionally open a file with it
export                Run a query and save its results
help                  List available commands or provide detailed help for a specific command
history               View, run, edit, save, or clear previously entered commands
list                  List queries by group.
macro                 Manage macros
report                Run multiple queries and generate a HTML report
run                   Execute a query
run_pyscript          Run a Python script file inside the console
run_script            Run commands in script file that is encoded as either ASCII or UTF-8 text
search                Full-text search through stored queries.
set                   Set a dynamic search parameter (set <TARGET> <VALUE...>)
shell                 Execute a command as if at the OS prompt
shortcuts             List available shortcuts
show                  Show dynamic search parameters
unset                 Unset a dynamic search parameter (unset <TARGET>)

Undocumented commands:
======================
exit  q  quit  stop

BloodHound CE との統合

カスタム検索

scripts/bloodhound-ce/query-importer.py

ツールをダウンロード