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

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

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

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

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

Категории

Все категории
Loading categories
pyCobaltHound — pyCobaltHound — это расширение скрипта Aggressor для Cobalt Strike, предназначенное для обеспечения глубокой интеграции между Cobalt Strike и Bloodhound. | Kitploit
Инструменты/GitHubGitHub/nvisosecurity/pycobalthound
Фреймворки для пентестаПовышение привилегийРазведкаФреймворки для эксплойтовЛатеральное перемещениеСбор информацииПост-эксплуатацияRed Teaming
GitHubnvisosecurity/pycobalthound

pyCobaltHound

pyCobaltHound — это расширение скрипта Aggressor для Cobalt Strike, предназначенное для обеспечения глубокой интеграции между Cobalt Strike и Bloodhound.

Репозиторий
1351954 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

Краткое описание

pyCobaltHound — это расширение для скрипта Aggressor для Cobalt Strike, которое обеспечивает глубокую интеграцию между Cobalt Strike и Bloodhound.

pyCobaltHound помогает операторам красных команд:

  • Автоматически запрашивать базу данных BloodHound для обнаружения путей повышения привилегий, открываемых вновь собранными учётными данными.
  • Автоматически помечать скомпрометированных пользователей и компьютеры как захваченные.
  • Позволять операторам быстро и легко исследовать потенциал повышения привилегий для сессий beacon и пользователей.

Для этого pyCobaltHound использует набор встроенных запросов. Операторы также могут добавлять/удалять собственные запросы, чтобы настроить возможности мониторинга pyCobaltHound. Это даёт им гибкость адаптировать pyCobaltHound на лету во время операций с учётом конкретных целей (пользователи, хосты и т.д.).

Установка и использование

Для установки pyCobaltHound клонируйте этот репозиторий. Не забудьте также клонировать включённый подмодуль!

Вы можете использовать следующую команду:

  • git clone https://github.com/NVISOsecurity/pyCobaltHound.git --recurse-submodules

Зависимости

Убедитесь, что следующие зависимости правильно установлены:

PyCobalt

PyCobalt — это Python API для Cobalt Strike. Он предоставляет множество функций Aggressor для непосредственного использования из Python.

Настройка

Убедитесь, что у вас установлен Python3+. Хотя PyCobalt может работать и на macOS, и на Windows, мы тестировали его только на Linux.

Существует два способа использования библиотеки PyCobalt:

  1. Запускать её напрямую из репозитория с помощью PYTHONPATH. pyCobaltHound использует этот подход, устанавливая путь поиска из программы Python с помощью переменной sys.path.
  2. Установить библиотеку PyCobalt. Для этого выполните python3 setup.py install. Вам придётся изменить pycobalthound.py, чтобы он использовал установленную библиотеку вместо той, что находится во включённом репозитории.
Замечания
  • Учтите, что нет гарантии, что проект PyCobalt будет поддерживаться в будущем. Фактически последнее обновление проекта было для включения изменений, сделанных в Cobalt Strike 4.2. Однако, поскольку pyCobaltHound использует только базовые функции Aggressor для взаимодействия с Cobalt Strike и его оператором, для pyCobaltHound это не является большой проблемой.
  • Подмодуль PyCobalt, используемый в этом проекте, является нашим форком. Мы не контролируем репозиторий PyCobalt.
Советы и хитрости
  • PyCobalt поставляется с некоторыми командами Script Console для управления запущенными скриптами Python. Когда вы перезагружаете скрипт Aggressor, следует сначала явно остановить скрипты Python. В противном случае они будут работать вечно, ничего не делая. Во время разработки pyCobaltHound мы заметили, что это также может привести к неопределённому поведению.

    Перезагрузка pyCobaltHound может быть выполнена следующим образом:

    root@kitploit:~
    aggressor> python-stop-all`
    [pycobalt] Asking script to stop: /root/pycobalthound/pycobalthound.py
    [pycobalt] Script process exited: /root/pycobalthound/pycobalthound.py
    
    aggressor> reload example.cna`
    [pycobalt] Executing script /root/pycobalthound/pycobalthound.py
    
  • Для правильной работы PyCobalt вы можете вызывать PyCobalt только в одном скрипте Aggressor. Имейте это в виду, если хотите использовать pyCobaltHound вместе с другими скриптами Aggressor, использующими PyCobalt. Наш подход заключается в том, чтобы иметь скрипт Aggressor с вызовами python() и include() для каждого инструмента на основе PyCobalt.

notify2 (Опционально)

notify2 — это (или был) пакет для отображения уведомлений на рабочем столе в Linux. Как мы увидим позже, pyCobaltHound поддерживает несколько способов уведомления оператора. notify2 используется в Linux для отправки уведомлений демону уведомлений через D-Bus.

Чтобы включить это, установите notify2 с помощью:

pip install notify2

Использование в Cobalt Strike

Использование pyCobaltHound в Cobalt Strike так же просто, как импорт скрипта Aggressor pycobalthound.cna в ваш клиент. После этого в строке меню Cobalt Strike появится меню pyCobaltHound.

Использование

Мониторинг хранилища учётных данных

Первоначальная цель pyCobaltHound заключалась в мониторинге кэша учётных данных Cobalt Strike (View > Credentials) на предмет новых записей. Это происходит путём реагирования на событие on_credentials, которое Cobalt Strike генерирует при изменениях в хранилище учётных данных.

Когда это событие происходит, pyCobaltHound:

  1. Анализирует и проверяет данные, полученные от Cobalt Strike.
  2. Проверяет, исследовал ли он уже эти сущности, просматривая свой кэш.
  3. Добавляет сущности в кэш для будущих запусков.
  4. Проверяет, существуют ли сущности в базе данных BloodHound.
  5. Помечает сущности как захваченные.
  6. Запрашивает базу данных BloodHound для каждой новой сущности, используя как встроенные, так и пользовательские запросы.
  7. Анализирует возвращённые результаты, уведомляет оператора о любых интересных находках и записывает их в базовый HTML-отчёт.

Поскольку всё это происходит асинхронно от основного клиента Cobalt Strike, этот процесс не должен блокировать ваш интерфейс, так что вы можете продолжать работать, пока pyCobaltHound проводит исследование в фоне.

pyCobaltHound использует отдельные кэши для каждого team-сервера, чтобы избежать проблем при использовании нескольких team-серверов.

Удаление сущностей из кэша

Иногда возникают ситуации, когда вы хотите повторно исследовать определённых пользователей (или всё хранилище учётных данных). Это может быть актуально, если вы загрузили новые данные в базу данных BloodHound.

Поскольку pyCobaltHound уже должен был исследовать (и, следовательно, кэшировать) все сущности в вашем хранилище учётных данных, он не будет оценивать их на основе этих новых данных без вмешательства оператора.

Для управления тем, какие сущности кэшируются, доступны два метода.

Удаление конкретных сущностей

В случаях, когда вы хотите удалить определённую сущность (или несколько) из кэша, вы можете сделать это в просмотрщике учётных данных (View > Credentials). Просто выберите целевые объекты и нажмите опцию remove from cache под пунктом меню pyCobaltHound.

Удаление всего кэша

В случаях, когда вы хотите удалить все сущности из кэша, вы можете сделать это в главном меню pyCobaltHound (Cobalt Strike > pyCobaltHound > Wipe cache). Это наиболее полезно, когда вы хотите заново оценить всё хранилище учётных данных.

Ручной запуск исследования

После удаления целей из кэша вы можете вручную запустить pyCobaltHound для повторного исследования содержимого хранилища учётных данных. Этот процесс полностью аналогичен описанному выше.

Управление beacon

pyCobaltHound содержит функциональность для взаимодействия с существующими сессиями beacon. Она доступна в контекстном меню beacon. Обратите внимание, что эти команды могут выполняться для одного beacon или для выбранного набора beacon.

Эта функциональность особенно полезна при работе с пользователями и компьютерами, чьи учётные данные ещё не скомпрометированы, но которые фактически находятся под нашим контролем (например, потому что у нас есть beacon, работающий под их токеном сессии).

Пометить как захваченное

Функция Mark as owned (pyCobaltHound > Mark as owned) может использоваться для пометки beacon (или набора beacon) как захваченного в базе данных BloodHound.

Этот диалог запросит у оператора следующую информацию:

  • Тип узла
    • Both: Если выбрано, то и пользователь, и компьютер, связанные с контекстом beacon, будут помечены как захваченные. pyCobaltHound будет помечать компьютеры как захваченные только в том случае, если сессия beacon работает как локальный администратор, SYSTEM или сессия с высоким уровнем целостности под другим пользователем.
    • User: Если выбрано, пользователь, связанный с контекстом beacon, будет помечен как захваченный.
    • Computer: Если выбрано, компьютер, связанный с контекстом beacon, будет помечен как захваченный, независимо от уровня целостности соответствующей сессии.
  • Домен
    • Поскольку контекст beacon не содержит ссылки на домен, операторы должны указать его самостоятельно.

Исследование

Функция Investigate (pyCobaltHound > Mark as owned) может использоваться для исследования пользователей и хостов, связанных с beacon (или набором beacon).

Этот диалог запросит у оператора следующую информацию:

  • Тип узла
    • Both: Если выбрано, то и пользователь, и компьютер, связанные с контекстом beacon, будут исследованы. pyCobaltHound будет исследовать компьютеры только в том случае, если сессия beacon работает как локальный администратор, SYSTEM или сессия с высоким уровнем целостности под другим пользователем.
    • Both without logic: Если выбрано, то и пользователь, и компьютер, связанные с контекстом beacon, будут исследованы. pyCobaltHound будет исследовать все сущности без проверки уровней целостности.
    • User: Если выбрано, пользователь, связанный с контекстом beacon, будет помечен как захваченный.
    • Computer: Если выбрано, компьютер, связанный с контекстом beacon, будет помечен как захваченный, независимо от уровня целостности соответствующей сессии.
  • Домен
    • Поскольку контекст beacon не содержит ссылки на домен, операторы должны указать его самостоятельно.
  • Сгенерировать отчёт
    • Если эта опция выбрана, будет сгенерирован базовый HTML-отчёт.

Исследование сущностей

pyCobaltHound содержит функциональность для свободного исследования сущностей. Она находится в главном меню (Cobalt Strike > pyCobaltHound > Investigate).

Эта функциональность особенно полезна при работе с пользователями и компьютерами, чьи учётные данные не были скомпрометированы и которые не находятся под нашим контролем.

Этот диалог запросит у оператора следующую информацию:

  • Цели
    • Строка в формате CSV с сущностями, которые оператор хочет исследовать. Это могут быть просто имена пользователей/компьютеров (например, user1) или полные доменные имена ([email protected]).
    • Примечание: Не смешивайте разные формы записи! Вы можете использовать либо имена пользователей/компьютеров, либо FQDN!
  • Домен включён
    • Этот параметр указывает, содержит ли предоставленная строка целей только имена пользователей/компьютеров или полные доменные имена.
  • Домен
    • Если строка целей не содержит FQDN, оператору необходимо указать домен, к которому принадлежат исследуемые сущности.
  • Сгенерировать отчёт
    • Если эта опция выбрана, будет сгенерирован базовый HTML-отчёт.

Настройки

Меню настроек pyCobaltHound находится по адресу Cobalt Strike > pyCobaltHound > Settings.

pyCobaltHound сохраняет ваши настройки на диск. Каждый раз при перезагрузке pyCobaltHound он проверяет наличие файла настроек и загружает сохранённые настройки, если находит их.

pyCobaltHound сохраняет файл настроек для каждого team-сервера, поэтому можно иметь разные настройки на разных team-серверах.

Neo4j

Для аутентификации в базе данных BloodHound pyCobaltHound потребуется следующая информация:

  • Имя пользователя Neo4j
  • Пароль Neo4j
  • URL Neo4j

Примечание: если вы выберете постоянное сохранение настроек (для их сохранения после перезагрузки клиента/хоста), pyCobaltHound десериализует и сохранит эти учётные данные на диске.

Кэширование

Как обсуждалось ранее, pyCobaltHound использует кэширование, чтобы не выполнять лишнюю работу. Кэширование можно отключить в настройках. Это особенно полезно при разработке новых запросов, чтобы не приходилось постоянно управлять кэшем или очищать его.

Уведомления

pyCobaltHound поддерживает несколько различных способов уведомления оператора после обнаружения интересующей сущности. Эти уведомления можно отключить.

Встроенные уведомления

По умолчанию pyCobaltHound уведомляет оператора с помощью стандартного диалогового окна Aggressor. Эта опция может нарушить рабочий процесс оператора. Однако это метод по умолчанию, поскольку он поддерживается на всех платформах, где можно запустить клиент Cobalt Strike.

Уведомления notify2

pyCobaltHound также поддерживает отображение уведомлений на рабочем столе в Linux. Это наш предпочтительный вариант, поскольку он не прерывает рабочий процесс оператора.

Отчёты

Во время некоторых рабочих процессов pyCobaltHound генерирует HTML-отчёт. Это решение было принято, чтобы не заваливать оператора огромными уведомлениями, если было исследовано много сущностей. Эти отчёты будут созданы в папке reports. Генерацию отчётов можно отключить.

Синхронизация запросов

По умолчанию pyCobaltHound синхронизирует запросы между team-серверами, используя центральный файл для всех настроек, связанных с запросами. Это означает, что запросы, которые включены, добавлены или удалены на одном team-сервере, также будут включены, добавлены или удалены из запросов, созданных другими team-серверами. Это в основном опция для удобства, и её можно отключить, что полезно в случаях, когда вы выполняете запросы, специфичные для операции, которые не применяются ко всем team-серверам, к которым вы подключены.

Отключение

Когда синхронизация запросов отключена, pyCobaltHound проверяет наличие уникальных файлов запросов. Если они существуют, он загрузит их и будет использовать эти запросы в своих рабочих процессах. Если файлы не существуют, он создаст и загрузит их. Этот параметр сохраняется после перезагрузок.

Включение

Когда синхронизация запросов включена, pyCobaltHound проверяет наличие уникальных файлов запросов. Если они существуют, оператору будет предложен выбор.

У оператора есть следующие варианты:

  • Delete
    • Если выбрано, pyCobaltHound просто удалит уникальные файлы запросов. Все пользовательские запросы будут потеряны.
  • Merge
    • Если выбрано, pyCobaltHound попытается объединить уникальные файлы запросов с общими файлами запросов. Перед объединением запроса он проверит, нет ли в общем файле запроса с таким же именем или таким же Cypher-выражением. Если возникнут конфликты слияния, оператора спросят, хочет ли он сохранить неслитые запросы. Они будут сохранены в отдельном файле. Затем уникальные файлы запросов будут удалены.
  • Keep
    • Если выбрано, pyCobaltHound просто оставит уникальные файлы запросов. Все пользовательские запросы будут сохранены, и эти файлы будут загружены снова, если синхронизация запросов будет снова отключена.

Запросы

Встроенные запросы

pyCobaltHound в настоящее время поддерживает следующие встроенные запросы:

  • Пользователь (user-queries.json)
    • Путь к администраторам домена
    • Путь к высокоценным целям
  • Компьютер (computer-queries.json)
    • Путь к высокоценным целям

Управление запросами

Управление различными запросами, которые использует pyCobaltHound, осуществляется через главное меню (Cobalt Strike > pyCobaltHound > Queries).

Включение/отключение запросов

Диалог Update queries позволяет операторам включать/отключать определённые запросы. При использовании этого диалога оператор сначала будет спрошен, какой тип запросов он хочет обновить. Это сделано для динамической загрузки/отображения правильных запросов во время этого рабочего процесса.

После ответа на первый диалог оператору будет представлен список всех доступных запросов данного типа. Здесь они могут выбрать, какие запросы включить/отключить.

aggressor_query_update

Опция типа запроса — это некрасивое обходное решение для передачи типа запроса в следующую функцию рабочего процесса, и она не должна беспокоить оператора.

Добавление пользовательских запросов

Функция Add query позволяет операторам добавлять/удалять собственные запросы, чтобы настроить возможности исследования pyCobaltHound. Это даёт им гибкость адаптировать pyCobaltHound на лету во время операций с учётом конкретных целей (пользователи, хосты и т.д.).

Этот диалог запросит у оператора следующую информацию:

  • Имя
    • Имя пользовательского запроса. Оно будет использоваться в различных меню и отчётах во время рабочих процессов pyCobaltHound.
  • Cypher-запрос
    • Cypher-запрос, который должен выполнить pyCobaltHound. Операторы достаточно свободны в определении своих запросов. Единственные требования следующие:
      • pyCobaltHound динамически генерирует следующую строку Cypher на основе имён исследуемых сущностей:
        • WITH [account names here] AS samAccountNames UNWIND samAccountNames AS names.
        • Заполнитель {statement} будет заменён этой строкой.
        • Эта строка Cypher берёт samAccountNames целей и присваивает их переменной "names".
        • Чтобы ваш запрос работал с этим, вы должны убедиться, что он начинается со следующего оператора:
          • MATCH (x) WHERE x.name STARTS WITH names
          • Я рекомендую фильтрацию (например, (x:User)) в зависимости от типа добавляемого запроса.
      • pyCobaltHound ожидает, что запрос вернёт уникальный набор имён пользователей.
        • Для этого завершите запрос RETURN DISTINCT (x.name)
      • Для примеров обратитесь к встроенным запросам.
  • Заголовок отчёта
    • Заголовок, который pyCobaltHound использует для пользовательского запроса. Он будет использоваться в уведомлениях и отчётах во время рабочих процессов pyCobaltHound.
      • Единственное требование — чтобы предложение содержало заполнитель {number}, который pyCobaltHound заменит на количество результатов этого запроса.
  • Статус
    • Этот параметр определяет, будет ли запрос создан во включённом или отключённом состоянии.
  • Тип запроса
    • Тип запроса, который вы добавляете. Это определит, какой набор запросов будет отредактирован.

Удаление пользовательских запросов

Диалог Delete query позволяет операторам удалять определённые пользовательские запросы из pyCobaltHound. При использовании этого диалога оператор сначала будет спрошен, какой тип запроса он хочет удалить. Это сделано для динамической загрузки/отображения правильных запросов во время этого рабочего процесса.

После ответа на первый диалог оператору будет представлен список всех доступных запросов данного типа. Здесь они могут выбрать, какие запросы удалить.

aggressor_query_remove

Опция типа запроса — это некрасивое обходное решение для передачи типа запроса в следующую функцию рабочего процесса, и она не должна беспокоить оператора.

Ссылки

pyCobaltHound использует/вдохновляется следующими проектами:

  • pycobalt от dcsync
  • Vampire от Coalfire-Research
  • ANGRYPUPPY от vysecurity
  • Max от knavesec
  • BloodHound от SpecterOps
Скачать инструмент