autobloody 支持哪些 BloodHound 边?14 种可利用攻击关系的详细清单
autobloody 支持哪些 BloodHound 边?14 种可利用攻击关系的详细清单
【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody
autobloody 是一款开源的Active Directory 提权自动化工具,它能直接读取 BloodHound 数据库中已发现的攻击路径,并自动执行每一步利用动作。很多安全初学者第一次接触它时都会问:autobloody 到底支持哪些 BloodHound 边(Edge)?本文为你整理当前版本支持的全部 14 种可利用攻击关系,并用通俗易懂的方式解释每条边的作用、利用方式与风险等级,帮你快速上手这个 AD 提权神器。
一、先搞懂:什么是 BloodHound 边?🕸️
BloodHound 通过 SharpHound 等采集器收集 Active Directory 环境中的对象(用户、组、计算机、域、OU、GPO 等)及其相互关系,这些关系在图形数据库中被称为边(Edge),例如:
A -> MemberOf -> B:表示用户 A 是组 B 的成员A -> GenericAll -> B:表示 A 对 B 拥有完全控制权
autobloody 会调用 Neo4j 图数据库中的 Dijkstra 最短路径算法,在你拥有的源对象(Source)和想要拿下的目标对象(Target)之间找出一条成本最低、最易利用的边链,然后借助底层 bloodyAD 库自动执行攻击。相关逻辑可参考 database.py 中的路径查找实现。
💡 简单理解:BloodHound 负责"画地图找路",autobloody 负责"沿着路自己走过去"。
二、14 种支持的 BloodHound 边:完整清单 📋
官方在 README.md 中明确列出了当前支持自动利用的全部边。为了便于记忆,我把它们分成4 大类:
🧑🤝🧑 第一类:组成员关系类(3 种)
| 边名称 | 目标对象 | 攻击效果 |
|---|---|---|
| MemberOf | Group | 把目标加入高权限组 |
| AddSelf | Group | 把自身加入目标组 |
| AddMembers | Group | 向组中添加指定成员 |
这类边是提权链中最常见的"跳板":攻击者通过把自己或受控账户加入 Domain Admins 等高权限组,一步跨越权限边界。执行逻辑位于 automation.py 的_addMember方法,利用完成后还会自动调用remove.groupMember进行清理还原,降低被发现的概率。
🔑 第二类:凭据获取类(4 种)
| 边名称 | 目标对象 | 攻击效果 |
|---|---|---|
| ForceChangePassword | User / Computer | 直接重置目标密码 |
| ReadGMSAPassword | GMSA 账户 | 读取托管服务账户密码哈希 |
| DCSync | Domain | 模拟域控复制,离线导出 NTDS.dit |
| GetChanges / GetChangesAll | Domain | 授予目录复制变更权限,配合 DCSync 使用 |
这类边的"含金量"最高:
- ForceChangePassword会强制把目标密码改成默认值
AutoBl00dy123!(定义在PASSWORD_DEFAULT常量中),随后用新密码接管目标身份; - ReadGMSAPassword会直接读取
msDS-ManagedPassword属性拿到 GMSA 账户的 NT 哈希; - DCSync与GetChanges/GetChangesAll是域渗透的王牌组合,拿到后 autobloody 会提示你用
secretsdump.py离线 dump 整个域的密码哈希。
🛡️ 第三类:ACL 权限控制类(6 种)
| 边名称 | 目标对象 | 攻击效果 |
|---|---|---|
| GenericAll | 任意对象 | 完全控制目标(等价于所有权限) |
| GenericWrite | 任意对象 | 可写目标任意属性 |
| WriteDacl | 任意对象 | 可修改目标的 DACL 访问控制列表 |
| WriteOwner | 任意对象 | 可夺取目标对象的所有权 |
| Owns | 任意对象 | 你已经是目标的所有者 |
| AllExtendedRights | 任意对象 | 拥有目标全部扩展权限 |
ACL 类是攻击面最广的一类,autobloody 会根据目标类型选择不同的后续动作:
- 目标是用户或计算机时,优先尝试Shadow Credentials(影子凭据)攻击,失败则回退到强制改密(见
_shadowCredentialsOrForceChange方法); - 目标是组或域时,先通过
add.genericAll或set.owner改写 ACL,再顺势执行加成员、加 DCSync 权限等后续操作; - 目标是OU / GPO时,通过
_ownerContainer先夺所有权、再授予 GenericAll,实现容器级控制。
🏗️ 第四类:层级结构类(1 种)
| 边名称 | 目标对象 | 攻击效果 |
|---|---|---|
| Contains | OU / 容器 | 利用包含关系获得对子对象的控制 |
Contains表示一个容器"包含"其子对象。当攻击者对一个 OU 或容器拥有写入权限时,就可以通过它影响到 OU 内继承权限的所有子对象,是横向扩展的重要路径。
三、autobloody 如何"挑选"最优攻击路径?🧠
光知道支持哪些边还不够,理解选路逻辑才能用好它。在 database.py 的_setWeight方法中,每种边都被赋予了一个bloodycost成本值,规则如下:
- 成本越低 = 越优先尝试:例如
MemberOf成本为 0(无需写 LDAP,最安全),域级DCSync/GenericAll成本为 1; - 写操作越多成本越高:如
WriteOwner需要 3 次写入,成本相应提高; - 可能影响业务的操作成本更高:如强制改密会干扰正常服务,因此
ForceChangePassword的成本被设为 110000; - 没被赋权重的边默认成本为 9999999999,等价于"不可利用"。
autobloody 会在这张加权图上运行 Dijkstra 算法,找到源到目标之间总成本最低的边链,然后按顺序执行。整个执行与回滚(cleanup)机制都封装在 automation.py 中。
⚠️ 注意:如果路径中出现了未被支持的边(例如 GPO 相关的 LinkGPO 等),autobloody 会报错提示"该路径无法由 autobloody 单独利用",需要配合其他工具完成。
四、快速上手:一条命令跑通攻击链 🚀
安装后(pip install autobloody),配合已导入数据的 Neo4j 数据库,一条命令即可完成从"源账户"到"目标对象"的自动提权:
autobloody -p 'Password123!' --host 192.168.10.2 -dp 'neo4jP@ss' -ds 'JOHN.DOE@BLOODY.LOCAL' -dt 'BLOODY.LOCAL'-ds指定源对象(你拥有的账户)-dt指定目标对象(你想拿下的对象)- 默认会先进入模拟模式(simulate)展示即将执行的动作,确认后输入
y才会真正执行;加上-y参数可直接执行
命令行参数定义可参考 main.py。
五、使用建议与注意事项 ⚠️
- 仅限授权测试:autobloody 是红队与安全评估工具,请务必在获得授权的环境中使用,切勿用于非法入侵;
- 部分操作不可还原:README 明确指出,除了
ForceChangePassword和setOwner之外,其他操作都会在利用后自动清理还原,但改密与夺权操作会留下痕迹; - 性能优化:在 Neo4j 中安装 GDS 图数据科学插件可以大幅提升路径查找速度,没有它 autobloody 会退回较慢的原生 CYPHER 查询;
- 掌握 14 种边 = 掌握 AD 提权地图:把这张清单当作你的检查表,结合 BloodHound 的图形界面分析,你就能快速判断一条提权路径是否可以被 autobloody 全自动打通。
希望这份BloodHound 边详细清单能帮你更高效地使用 autobloody。如果你在实战中遇到"路径不可利用"的提示,不妨对照上面的分类检查一下——也许只是这条链上混入了一条暂时不支持的关系而已。
【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
