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

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

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

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

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/improsec/improhound
权限提升漏洞分析信息收集渗透测试
GitHubimprosec/improhound

ImproHound

识别 BloodHound 中破坏你的 AD 层级的攻击路径

查看仓库
3283623年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

GitHub release (latest SemVer) GitHub all releases

ImproHound

识别破坏AD分层结构的BloodHound攻击路径

ImproHound 是一个带有图形界面的 dotnet 独立 Windows x64 可执行文件。 要使用 ImproHound,您必须运行 SharpHound 从 AD 收集必要的数据。然后将数据上传到您的 BloodHound 安装实例。ImproHound 会连接到 BloodHound 底层的 Neo4j 数据库。在 ImproHound 中,您将通过 OU 结构将 AD 对象分为不同的层级,ImproHound 将识别出允许 AD 对象危及更高(更接近零)层级对象的 AD 关系,并将层级违规保存到 CSV 文件中。

ImproHound 博客文章

ImproHound 演示视频

ImproHound DEF CON Adversary Village 演讲

目录
  • 安装
  • 用法
  • AD 对象分层指南
  • 最新测试过的依赖版本

安装

1. 设置您的 BloodHound 数据库

  1. 安装 BloodHound

  2. 在您的 AD 中使用 SharpHound 收集 BloodHound 数据

    注意:这会在您的防病毒软件、SIEM 等中产生噪音。

    示例:从 cmd 运行 SharpHound.exe,收集所有数据(注意,GPOLocalGroup 不包含在 All 中):

    root@kitploit:~
    SharpHound.exe --CollectionMethods All,GPOLocalGroup
    

    提示 1:使用 Domain 参数收集林中其他域的数据。

    提示 2:要获取更多数据,请使用 会话循环收集方法

  3. 在 BloodHound GUI 中上传您的 BloodHound 数据

    BloodHound 存在一个 bug,有时在上传 BloodHound 数据 zip 文件时会跳过域 json 文件。上传数据后,检查 BloodHound 中的数据库统计信息,确保域对象存在。

2. 安装 APOC Neo4j 插件 (启用我们需要的出色图形操作)

  1. 下载与您的 Neo4j 版本匹配的 APOC 版本(apoc-x.x.x.x-all.jar)。

    在 版本兼容性矩阵 中找到与您的 Neo4j 版本匹配的 APOC 版本。

  2. 尝试记住您安装 Neo4j 的位置,并将 APOC jar 文件放在:$NEO4J_HOME/plugins/

    • Linux 中的 $NEO4J_HOME: /var/lib/neo4j/
    • Windows 中的 $NEO4J_HOME: 检查 Neo4j 服务,它会显示位置。
  3. 在您喜欢的文本编辑器中编辑 neo4j.conf,通过将以下行: #dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.* 替换为 dbms.security.procedures.unrestricted=apoc.* 来允许不受限制的 APOC 访问。

    • Linux 中的 neo4j.conf: /etc/neo4j/neo4j.conf
    • Windows 中的 neo4j.conf: $NEO4J_HOME/conf/neo4j.conf

    如果您希望在一台主机上运行 ImproHound,而在另一台主机上运行 BloodHound,则必须允许远程连接到 BloodHound 主机上的 Neo4j 数据库。为此,请在 neo4j.conf 中移除 #dbms.default_listen_address=0.0.0.0 行的 # 号。

  4. 重启 Neo4j

    • Linux: systemctl restart neo4j
    • Windows (cmd): net stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)

3. 在 Windows (x64) 中下载并运行最新版本的 ImproHound.exe

    确认您能够使用与 BloodHound GUI 相同的凭据登录到 BloodHound 数据库。

用法

连接到数据库

alt text

输入数据库凭据并建立连接。这与您在 BloodHound GUI 中使用的凭据相同。

继续或重新开始

alt text

ImproHound 会在 BloodHound 数据库中的节点上创建 'TierX' 标签。如果您之前在此 BloodHound 数据库中使用过 ImproHound,系统会询问您是继续使用已创建的分层还是重新开始。

默认分层或全部放入 Tier 2

alt text

ImproHound 提供选项:设置 '默认分层'(将 Domain Admins 设为 Tier 0,Domain Users 设为 Tier 2 等),或者将所有对象设为 Tier 2。

OU 结构

alt text

这是您将 AD 对象分类到不同层级的页面。窗口显示 OU 结构。每个 AD 对象都有一个层级值,可以通过箭头增减。

将子对象设为指定层级

如果您选择了一个域或 AD 容器,可以点击 '将子对象设为指定层级' 将所有子对象(递归)设置为该域/容器的层级。

将成员设为指定层级

如果您选择了一个组,可以点击 '将成员设为指定层级' 将所有成员(递归)设置为该组的层级。

为 GPO 设置层级

如果您点击 '为 GPO 设置层级',每个 GPO 的层级将被设置为它所链接的 OU 中最高层级(最接近零)的 OU 层级。未链接到 OU 的 GPO 的层级不会改变。

获取分层违规

查找 BloodHound 数据库中所有 AD 对象控制更高层级(更接近零)AD 对象的关系。

将生成两个 CSV 文件作为输出:

  • adobjects-[时间戳].csv: 所有 AD 对象及其所在层级。

  • tiering-violations-[时间戳].csv: 分层违规。

违规 CSV 中的记录示例:

SourceTierSourceTypeSourceNameSourceDistinguishednameRelationIsInheritedTargetTierTargetTypeTargetNameTargetDistinguishedname
Tier1User[email protected]CN=svc-monitor,CN=Users,DC=hot,DC=localForceChangePasswordTrueTier0User[email protected]CN=T0_JBK,CN=Users,DC=hot,DC=local
Tier2Group[email protected]CN=Wrk-Admins,CN=Groups,DC=hot,DC=localGenericWriteTier0GPO[email protected]CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local

第一条记录是一个 Tier 1 服务帐户,有权更改 Tier 0 用户帐户的密码。该关系是继承的。不幸的是,并不总是能够从 BloodHound 数据中查看继承自何处,但您可以通过在“用户和计算机”中检查目标 AD 对象的权限来手动验证。第二条记录是一个组,有权编辑 GPO,该 GPO 很可能链接到包含 Tier 0 服务器的 OU,因为它是一个 Tier 0 GPO。

您可以在此处查找所有关系类型及其利用方式。

如果您发现某个对象处于过高的层级(最接近零),您应该在 ImproHound 中将其纠正,然后以该对象为 SOURCE 检查违规。如果某个对象处于过低的层级(最接近无穷大),您应该在 ImproHound 中将其纠正,然后以该对象为 TARGET 检查违规。

删除分层

所有层级标签和 ImproHound 在 BloodHound 数据库中创建的节点都将被删除。

AD 对象分层指南

正确地对 AD 对象进行分层非常重要。如果您将 DC 和普通低权限用户都设为 Tier 0 对象,ImproHound 将不会发现该用户对 DC 的管理员访问权限是一种分层违规。同样,如果将其两者都设为 Tier 2,也会出现同样的问题。

计算机

计算机根据被攻破后的严重程度进行分层。

  • Tier 0 – 域控制器和其他被归类为关键的系统,例如 SCCM、ADFS、PKI 和虚拟化服务器(VMware、Hyper V 等)
  • Tier 1 – 其余服务器基础设施
  • Tier 2 – 常规工作站

用户

用户根据他们可以登录的计算机以及他们控制的 AD 对象进行分层。例如,具有编辑链接到 Tier 1 服务器的 GPO 权限的用户,将使该用户成为 Tier 1 对象。

组

一个组属于其成员中最低的层级(最接近无穷大),除非该组包含不良成员,例如普通用户是 Domain Admins 的成员。

示例:Domain Users 是一个 Tier 2 组,即使您的 Tier 0 用户是该组的成员,因为赋予用户权限的并不是 Domain Users 的成员身份。另一方面,Domain Admins 组是一个 Tier 0 组,因为该组的成员身份使用户拥有很高的权限。据我所知,Cloneable Domain Controllers 组没有任何 AD 权限,但它应该只包含 Tier 0 对象,即 DC,因此它是一个 Tier 0 组。

容器(包括 OU 和域)

一个容器属于其子对象中最高的层级(最接近零),或更高。

示例:您将所有的 Tier 0、Tier 1 和 Tier 2 用户都放在 Users 容器中。一个对 Users 容器拥有完全控制权限的用户将能够危及所有用户,包括 Tier 0 用户(其中一些受保护,但这不影响本例),因此 Users 容器必须是 Tier 0 对象。

GPO

GPO 的层级由其链接到的 OU 的层级决定。GPO 属于其链接到的 OU 中最高的层级(最接近零)。 使用 '为 GPO 设置层级' 按钮确保所有 GPO 遵循此原则。

示例:一个有权编辑链接到 Tier 1 OU 的 GPO 的用户,可以通过修改 GPO 来控制 Tier 1 OU 下所有服务器上的 Administrators 成员身份。

最新测试过的依赖版本

  • BloodHound 4.2.0
  • Neo4j 4.4.10
  • APOC 4.4.0.8
  • Java/OpenJDK 11.0.16.1 LTS

TODO

  • 过滤掉仅存在其中一个的 GetChanges / GetChangesAll。
  • 默认添加更多 Tier 0 对象:RODC(包括 krbtgt_xxxxxx)、MSOL_、AdminSDHolder 等。
下载工具