Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cypherhound — Ваш шаблонный терминальный инструмент-компаньон для BloodHound | Kitploit
Инструменты/GitHubGitHub/fin3ss3g0d/cypherhound
РазведкаСбор информацииТестирование на ПроникновениеУтилиты и фреймворки
GitHubfin3ss3g0d/cypherhound

cypherhound

Ваш шаблонный терминальный инструмент-компаньон для BloodHound

Репозиторий
45436418 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CypherHound

logo

Терминальное приложение на Python3, содержащее cypher-запросы для наборов данных BloodHound, а также скрипт для автоматизации их импорта в BloodHound CE.

Примеры вывода

Терминал

demo

HTML-отчёт

report summary

HTML-отчёт (продолжение)

details sample

Зачем?

BloodHound — незаменимый инструмент для каждого пентестера. Однако у его архитектуры есть и отрицательные стороны. Я перечислю самые большие проблемы, с которыми столкнулся, и то, как этот инструмент призван их решить:

  1. Мои инструменты мыслят списками — пока мои инструменты не научатся парсить экспортированные графы JSON, мне нужны результаты графа в построчном формате .txt, чтобы реально атаковать с помощью других инструментов
  2. Копирование/вставка результатов графа — это вытекает из первого пункта, но нужно ли это объяснять?
  3. Графы могут быть слишком большими для отрисовки — крупные AD-среды, множество кратчайших путей, отображаемых на одном графе, и т.д. Информация, содержащаяся в любом графе, может помочь в достижении наших целей как атакующих, и мы должны иметь возможность эффективно просматривать все данные.
  4. Ручное выполнение пользовательских cypher-запросов отнимает много времени — давайте автоматизируем это :)

Этот инструмент может быть полезен как для красных, так и для синих команд.

Возможности

Верните контроль над своими данными BloodHound с помощью CypherHound!

  • Чтение шаблонов cypher из YAML-файла
    • Настройка cypher-запросов на основе пользовательского ввода (для пользователей, групп и компьютеров)
    • Пользовательские cypher-запросы с регулярными выражениями
  • Пользовательский экспорт всех результатов
    • Примеры в формате, удобном для grep/cut/awk
    • Экспорт любой комбинации cypher-запросов в современный, элегантный HTML-отчёт
  • Выполнение тех же запросов из GUI BloodHound CE
    • Конвертер YAML -> JSON и автоматический импорт запросов в BloodHound CE
    • Включён скрипт для импорта customqueries.json из BloodHound Legacy в 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Описание запроса
cypherСам запрос в формате Neo4j
msg_templateШаблон Jinja2 для вывода в терминал на основе переменных cypher; используйте псевдонимы для переменных Neo4j, чтобы Jinja не пыталась обрабатывать их как вложенные переменные

Динамические параметры в Cypher (Jinja2 params.*)

Программа использует Jinja2 для рендеринга Cypher. Определите параметры времени выполнения с помощью команды 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] }})

Распространённые шаблоны параметров

Ключ параметраПример значенияИспользование в Cypher
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

В этом репозитории предоставлен скрипт query-importer.py для автоматизации импорта запросов в интерфейс BloodHound CE из JSON-файла. Также предоставлен bh_query_converter.py для преобразования YAML-файла, предназначенного для терминального приложения, в формат JSON, ожидаемый query-importer.py и BloodHound CE. Пример требуемого формата 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"
    }
  ]
}

Команды

Полное меню команд приведено ниже:

Скачать инструмент