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

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

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

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

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

Категории

Все категории
Loading categories
flashingestor — Сборщик данных Active Directory на основе TUI, который принимает объекты LDAP, выполняет удаленный сбор RPC/SMB/HTTP и генерирует дампы, совместимые с BloodHound CE, для анализа путей атак. | Kitploit
Инструменты/GitHubGitHub/macmod/flashingestor
РазведкаКартирование сетиСбор информацииТестирование на ПроникновениеRed Teaming
GitHubmacmod/flashingestor

flashingestor

Сборщик данных Active Directory на основе TUI, который принимает объекты LDAP, выполняет удаленный сбор RPC/SMB/HTTP и генерирует дампы, совместимые с BloodHound CE, для анализа путей атак.

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

Популярное

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

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

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

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

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

flashingestor

TUI для сбора данных Active Directory.

Релиз GitHub Версия Go Размер кода Лицензия Статус сборки Go Report Card Загрузки GitHub Подписчики в Twitter

Философия

Основные цели этого проекта:

  1. Быть полноценным сборщиком данных, совместимым с BloodHound CE (Community Edition)
  2. Быть быстрее, менее шумным и более настраиваемым, чем другие сборщики
  3. Предоставлять удобный TUI (терминальный пользовательский интерфейс) с отслеживанием прогресса

Демонстрация

Детали реализации

Flashingestor реализует 3 основных отдельных шага: LDAP Ingestion, Remote Collection и Conversion, в отличие от других сборщиков, которые выполняют указанные методы за один шаг:

  • Ingest (Ctrl+l) — собирает необработанные данные атрибутов объектов из LDAP и сохраняет их в output/ldap во временные файлы msgpack. Запросы можно настраивать в config.yaml.

  • Remote (Ctrl+r) — читает эти промежуточные файлы в память, вычисляет список компьютеров для сбора и выполняет серию RPC/SMB/HTTP-запросов для получения соответствующей удалённой информации для объектов Computer и EnterpriseCA, которая сохраняется в output/remote.

  • Convert (Ctrl+s) — читает промежуточные файлы в память, объединяет информацию из этапов сбора и удалённого сбора и генерирует дамп, совместимый с Bloodhound, в output/bloodhound — этот шаг полностью выполняется офлайн.

Дополнительные технические детали и идеи можно найти в нашем 📖 Wiki.

Установка

root@kitploit:~
$ git clone https://github.com/Macmod/flashingestor
$ cd flashingestor

# Только сборка:
$ go build ./cmd/flashingestor

# Установка исполняемого файла в $GOBIN или $GOPATH/bin:
$ go install ./cmd/flashingestor

[!NOTE] Вы также можете использовать предварительно собранные бинарные файлы из Релизов.

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

Сначала аутентифицируйтесь одним из следующих способов:

root@kitploit:~
# Анонимно
# [Требуется dSHeuristics = 0000002 в объекте DirectoryServices
#  и может иметь ограниченную видимость из-за отсутствия ACE на чтение]
$ ./flashingestor -u '@<DOMAIN>' -p '' [...]

# Пользователь + Пароль
$ ./flashingestor -u <USER>@<DOMAIN> -p <PASSWORD> [-k] [...]

# Пользователь + NTHash
$ ./flashingestor -u <USER>@<DOMAIN> -H <NTHASH> [-k] [...]

# Пользователь + PFX
$ ./flashingestor -u <USER>@<DOMAIN> --pfx <PFXPATH> [--pfx-password <PFXPASS>] [-k] [...]

# Пользователь + PEM
$ ./flashingestor -u <USER>@<DOMAIN> --cert <PEMPATH> --key <KEYPATH> [-k] [...]

# Пользователь + AESKey
$ ./flashingestor -u <USER>@<DOMAIN> --aes-key <AESKEY> -k [...]

# Пользователь + Ticket
$ ./flashingestor -u <USER>@<DOMAIN> --ccache /path/to/ticket.ccache -k [...]
или
$ KRB5CCNAME=/path/to/ticket.ccache ./flashingestor -u <USER>@<DOMAIN> -k [...]

Затем выполните нужные шаги. Для сбора только через LDAP (DCOnly за исключением GPOLocalGroup и CertServices) достаточно нажать Ctrl+l, проверить успешность сбора, а затем нажать Ctrl+s для создания финального дампа.

Обнаружение DC и DNS

Рекомендуется указывать --dc и --dns при запуске flashingestor. Если не указать --dc, flashingestor попытается найти его с помощью SRV/A-запросов, что может задержать начальный шаг Ingest.

Необходимо указать --dns, если ваш стандартный DNS-сервер не знает о домене — если используется AD-интегрированный DNS, просто укажите --dns на DC, который его обслуживает. Кроме того, вне зависимости от --dc, если вы хотите выполнить шаг Remote Collection и ваш DNS-сервер не знает о компьютерах в домене, необходимо указать --dns для запросов.

[!TIP] В средах с несколькими DC также можно использовать утилиту dcprobe для измерения задержки до всех DC и поиска хорошего кандидата для сбора:

root@kitploit:~
$ go build ./cmd/dcprobe
$ ./dcprobe --dns 192.168.88.6 -d creta.local -r 10

Файл конфигурации

Если файл конфигурации отсутствует в текущем каталоге как config.yaml или по пути, указанному через --config, будут использованы параметры по умолчанию (такие же, как в предоставленном config.yaml) — они жёстко прописаны в config/fallback.go. Дополнительную информацию см. в Файле конфигурации.

Другие параметры

Рекомендуется использовать --log для указания выходного файла для логов (на случай, если потребуется их просмотреть после закрытия TUI) и -vv для отображения отладочных сообщений, так как это может помочь в устранении возможных проблем. Полный список аргументов командной строки см. в Аргументах командной строки.

Сбор данных (Ingestion)

[!NOTE] Запросы по умолчанию в предоставленном config.yaml разработаны с учётом информации, необходимой для конвертации в Bloodhound. Вы можете настроить запросы или атрибуты в config.yaml, но лучше избегать удаления необходимых атрибутов и изменения смысла фильтров поиска.

Если recurse_trusts установлен в true, он рекурсивно соберёт данные из всех доверенных доменов, используя исходные учётные данные, предоставленные для сбора.

Если search_forest установлен в true, он соберёт данные из доменов, входящих в тот же лес, что и исходный домен, из раздела Configuration — дополнительные запросы не потребуются, так как это уже часть плана сбора по умолчанию. Оба параметра могут быть установлены одновременно, и flashingestor соберёт данные из любого обнаруженного домена только один раз (либо через доверие, либо через текущий лес).

Если включён recurse_trusts и recurse_feasible_only также установлен в true, он попытается собрать данные из доверенного домена только если доверие:

  1. Входящее/двустороннее и
  2. Доверие либо включает исходный домен, либо является транзитивным.

Это означает, что односторонние доверия (только исходящие) не будут обрабатываться, и, за исключением первого уровня доверий, пути сбора останавливаются на нетранзитивных довериях — если B доверяет A нетранзитивно, A всё ещё может аутентифицироваться в B; но если C также доверяет B нетранзитивно, A не может аутентифицироваться в C.

[!IMPORTANT] recurse_trusts / search_forest будут выполнять аутентификацию в LDAP обнаруженных доменов только с указанными учётными данными из исходного домена, когда предоставленные учётные данные — это обычный пароль или NT-хэш; использование TGT для получения реферального билета для этой цели теоретически возможно, но ещё не реализовано в библиотеке adauth.

Промежуточные цепочки из Macmod/ldapx также могут использоваться непосредственно с flashingestor для обфускации LDAP-запросов на этапе сбора с помощью опций -f (--ldapx-filter), -a (--ldapx-attrs) и -b (--ldapx-basedn). При использовании -vv необработанные запросы до и после обфускации также будут отображаться в логе.

Удалённый сбор

Если вы планируете запускать шаг удалённого сбора, проверьте включённые methods — они примерно соответствуют методам, предлагаемым SharpHound, и могут использоваться для включения конкретных видов сбора через RPC или HTTP.

Аргументы --remote-* можно использовать для указания отдельных учётных данных для удалённого сбора. Если они не указаны, flashingestor попытается использовать те же учётные данные, что и для пользователя в стандартных аргументах сбора (--user, --password и т.д.).

Для удалённого сбора также можно использовать локального администратора, указав, например, --remote-user Administrator@., но эффективность этого подхода будет зависеть от того, является ли учётная запись встроенным администратором, а также от значений ключей реестра FilterAdministratorToken / LocalAccountTokenFilterPolicy. Подробнее об этом поведении см. в статье Pass-the-Hash Is Dead: Long Live LocalAccountTokenFilterPolicy

Конвертация

Опции compress_output и cleanup_after_compression помогают уменьшить использование дискового пространства. После загрузки финального дампа в Bloodhound вы можете безопасно удалить файлы из output/ldap и output/remote вручную, если они не нужны, но их можно сохранить для поиска важной информации без повторного полного сбора.

[!TIP] Основное назначение файлов msgpack в папках output/ldap и output/remote — служить промежуточным форматом для разделения ответственности за весь процесс, но эти файлы также можно использовать как источник информации, преобразовав их в JSON — так вам не придётся просматривать необработанные атрибуты объектов или результаты удалённого сбора:

root@kitploit:~
$ go build ./cmd/ingest2json
$ ./ingest2json output/ldap/YOURDOMAIN/SelectedFile.msgpack -o output.json

Удобным способом просмотра этих файлов может быть использование JQ/FX или вашего любимого языка программирования 🙂

Вклад в разработку

Вклад приветствуется: вы можете открыть issue или отправить pull request.

Благодарности

  • Большое спасибо SpecterOps за BloodHound, SharpHound / SharpHoundCommon и dirkjanm за BloodHound.py, которые были основными источниками для этого инструмента.

  • Спасибо rtpt-erikgeiser и RedTeamPentesting за adauth, а также p0dalirius за winacl — обе очень полезные библиотеки.

  • Спасибо oiweiwei за go-msrpc, так как его библиотека позволила реализовать методы удалённого сбора на основе RPC.

Известные проблемы

Удалённый сбор

  • Аналогично ограничению методов, допускаемых для кросспроцессной аутентификации при сборе, при запуске удалённого сбора с Kerberos (например, когда пользователь входит в группу Protected Users или если NTLM-аутентификация заблокирована настройками безопасности) или с сертификатами (которые под капотом используют PKINIT), удалённый сбор не будет пытаться аутентифицироваться на компьютерах доменов, отличных от домена пользователя. Это также относится к методу GPOLocalGroup, который в таких случаях не будет пытаться читать файлы GPO с DC других доменов, даже если в собранных данных есть несколько доменов.
  • SmbInfo для типа Computer всё ещё является базовой реализацией (только проверки реестра).
  • HttpEnrollmentEndpoints работает только с предоставленным именем пользователя и паролем.
  • Разрешение AllowedToDelegateTo / ServicePrincipalNames всё ещё является базовой реализацией.

Общие

  • Почти все свойства, реализованные в SharpHound, поддерживаются, но между этим инструментом и SharpHound есть много архитектурных различий, поэтому не ожидайте точного совпадения вывода с официальной реализацией (за исключением возможных ошибок). Ключевые различия могут возникать особенно в более сложных реализациях, таких как удалённый сбор через RPC и сбор, связанный с эксплуатацией CA/сертификатов.

  • Тайм-ауты в основном статичны — реализация SharpHound использует адаптивный тайм-аут (довольно умно!), но у меня ещё не было времени его изучить. При необходимости настройте тайм-ауты с помощью опций --timeout, --computer-timeout и --method-timeout (в config/config.go указаны другие тайм-ауты, специфичные для операций).

  • Тесты в настоящее время не реализованы, и я тестировал только небольшое подмножество функций вручную.

Лицензия

Лицензия MIT (MIT)

Copyright (c) 2023 Artur Henrique Marzano Gonzaga

Настоящим безвозмездно предоставляется разрешение любому лицу, получившему копию этого программного обеспечения и связанных файлов документации ("Программное обеспечение"), на использование Программного обеспечения без ограничений, включая, без ограничений, права на использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование и/или продажу копий Программного обеспечения, а также разрешение лицам, которым предоставляется Программное обеспечение, делать это при соблюдении следующих условий:

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

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ОПРЕДЕЛЁННОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ В КОЕМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ПРЕТЕНЗИЯМ, УБЫТКАМ ИЛИ ДРУГИМ ОБЯЗАТЕЛЬСТВАМ, БУДЬ ТО В ДЕЙСТВИЯХ ДОГОВОРА, ДЕЛИКТА ИЛИ ИНЫМ ОБРАЗОМ, ВОЗНИКШИМ ИЗ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ЕГО ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

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