Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
flashingestor — 基于TUI的Active Directory数据收集器,可摄取LDAP对象、执行远程RPC/SMB/HTTP收集,并生成与BloodHound CE兼容的转储文件,用于攻击路径分析。 | Kitploit
工具/GitHubGitHub/macmod/flashingestor
侦察网络映射信息收集渗透测试红队
GitHubmacmod/flashingestor

flashingestor

基于TUI的Active Directory数据收集器,可摄取LDAP对象、执行远程RPC/SMB/HTTP收集,并生成与BloodHound CE兼容的转储文件,用于攻击路径分析。

查看仓库
1731325个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

flashingestor

一个用于 Active Directory 收集的 TUI 工具。

GitHub Release Go Version Code Size License Build Status Go Report Card GitHub Downloads Twitter Follow

设计理念

该项目的主要目标是:

  1. 成为一个完整的数据摄取器,兼容 BloodHound CE(社区版)
  2. 比其他收集器更快、更安静、更可定制
  3. 提供友好的 TUI(终端用户界面)并带有进度追踪

演示

实现细节

Flashingestor 实现了三个独立的基本步骤:LDAP 导入、远程收集 和 转换,而其他收集器则在单个步骤中运行指定的方法:

  • 导入 (Ctrl+l) - 从 LDAP 收集原始对象属性数据,并将其存储在 output/ldap 下的中间 msgpack 文件中。查询可以在 config.yaml 中自定义。

  • 远程 (Ctrl+r) - 将这些中间文件读入内存,计算要收集的计算机列表,并执行一系列 RPC/SMB/HTTP 请求,以获取 Computer 和 EnterpriseCA 对象的相关远程信息,这些信息存储在 output/remote 下。

  • 转换 (Ctrl+s) - 将中间文件读入内存,合并导入和远程收集步骤的信息,并在 output/bloodhound 下生成 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] 你也可以使用提供的 Releases 中的预编译二进制文件。

用法

首先使用以下方式之一进行身份验证:

root@kitploit:~
# 匿名
# [需要在 DirectoryServices 对象中设置 dSHeuristics 为 0000002,
#  并且由于缺少 Read 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 收集(除 GPOLocalGroup 和 CertServices 外的 DCOnly),只需运行 Ctrl+l,检查导入是否成功,然后运行 Ctrl+s 生成最终转储。

DC 发现与 DNS

建议指定 --dc 和 --dns 来运行 flashingestor。如果不指定 --dc,flashingestor 会尝试通过 SRV / A 查询来查找 DC,这可能会延迟初始的 Ingest 步骤。

如果标准 DNS 服务器不知道域,则必须指定 --dns——当使用 AD 集成 DNS 时,只需将 --dns 指向托管它的 DC。此外,无论是否指定 --dc,如果你想运行 远程收集 步骤,并且你的 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 查看调试日志消息,这些可能有助于排查潜在问题。有关命令行参数的完整参考,请阅读 命令行参数。

导入

[!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 仅在提供的凭据是 明文密码 或 NT hash 时,才会使用指定凭据对发现的域中的 LDAP 进行身份验证;使用 TGT 为此目的发出引荐票据在理论上是可能的,但在 adauth 库中 尚未实现。

来自 Macmod/ldapx 的中间件链也可以直接与 flashingestor 一起使用,通过在导入步骤中使用 -f(--ldapx-filter)、-a(--ldapx-attrs)和 -b(--ldapx-basedn)选项来 混淆 LDAP 查询。使用 -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] output/ldap 和 output/remote 文件夹下的 msgpack 文件的主要目的是作为中间格式,以分离整个过程的职责,但这些文件也可以通过转换为 JSON 来作为信息源——这样你就不必查找原始对象属性或远程收集结果:

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

查看这些文件的一个好方法是使用 JQ/FX,或者你喜欢的编程语言 🙂

贡献

欢迎通过 提交问题 或 提交拉取请求 来贡献。

致谢

  • 特别感谢 SpecterOps 提供了 BloodHound、SharpHound / SharpHoundCommon,以及 dirkjanm 提供了 BloodHound.py,这些是本工具的主要参考。

  • 感谢 rtpt-erikgeiser 和 RedTeamPentesting 提供了 adauth,以及 p0dalirius 提供了 winacl,这两个库都非常有用。

  • 感谢 oiweiwei 提供了 go-msrpc,他的库使得实现基于 RPC 的远程收集方法成为可能。

已知问题

远程收集

  • 与导入中允许跨域身份验证的方法限制类似,当使用 Kerberos 进行远程收集时(例如,用户是 Protected Users 的一部分,或者通过安全设置阻止了 NTLM 身份验证),或者使用证书(底层使用 PKINIT)时,远程收集不会尝试对与用户所属域不同的域中的计算机进行身份验证。这也适用于 GPOLocalGroup 方法,在这种情况下,即使导入的数据中存在多个域,它也不会尝试从其他域的 DC 读取 GPO 文件。
  • Computer 类型的 SmbInfo 仍然是基础实现(仅注册表检查)。
  • HttpEnrollmentEndpoints 仅适用于提供的用户名/密码。
  • AllowedToDelegateTo / ServicePrincipalNames 解析仍然是基础实现。

通用

  • SharpHound 中实现的几乎所有属性都受支持,但此工具与 SharpHound 之间存在许多架构差异,因此不要期望输出与官方实现完全一致(除非是意外的 bug)。特别是在复杂实现(如通过 RPC 进行远程收集以及与 CA/证书滥用相关的收集)方面,可能会出现关键差异。

  • 超时设置目前大多是静态的——SharpHound 的实现使用了 自适应超时(非常巧妙!),但我还没有时间研究它。如有需要,可以使用 --timeout、--computer-timeout 和 --method-timeout 选项自定义超时(config/config.go 指定了其他操作特定的超时)。

  • 目前尚未实现测试,我只手动测试了少量功能。

许可证

MIT 许可证(MIT)

Copyright (c) 2023 Artur Henrique Marzano Gonzaga

特此授予任何人免费获得本软件及相关文档文件(“软件”)副本的许可,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的人这样做,但须满足以下条件:

上述版权声明和本许可声明应包含在所有软件的副本或重要部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对因本软件或本软件的使用或其他交易引起的任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为或其他方面。

下载工具