autobloody 实战演练:从普通域用户到域管理员的自动化提权完整案例
【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody
autobloody 是一款专为 Active Directory 环境设计的自动化提权工具,它能够读取 BloodHound 数据库中的攻击路径数据,自动规划并执行从普通域用户到域管理员的完整提权链条。本教程将从零开始,带你完成 autobloody 环境搭建、安装配置,并通过一个真实的实战案例,演示如何用一条命令实现 AD 提权自动化,让复杂的域渗透路径利用变得简单、快速、可复现。
autobloody 是什么?为什么安全测试需要它?🛡️
在日常的 Active Directory 安全评估中,安全人员最头疼的事情之一,就是 BloodHound 明明已经画出了攻击路径,却需要手动逐条执行每一个提权步骤——改 ACL、加组成员、改密码……不仅耗时,还容易出错。
autobloody 正是为了解决这个痛点而生的。它的核心功能是:
- 📊自动读取路径:从 Neo4j(BloodHound 的数据库)中查询提权路径
- 🧠智能选路:使用 Dijkstra 最短路径算法,找到代价最低、最隐蔽的提权路线
- ⚡一键执行:自动连接域控并逐步执行所有提权操作,全程无需人工干预
- 🧹自动清理:除改密码和设置属主外,其余可逆操作执行完成后自动还原现场
两大核心步骤
autobloody 的工作流程非常清晰,整个过程分为两步:
- 找路:通过 BloodHound 数据和 Neo4j 查询,找出最优提权路径
- 执行:借助 bloodyAD 组件,连接域控 LDAP 服务,自动执行路径上的每一个攻击动作
这也意味着,autobloody 的认证方式非常灵活,支持明文密码、Pass-the-Hash(哈希传递)、Pass-the-Ticket(票据传递)以及证书认证,覆盖了主流的域内认证场景。
实战前的环境准备清单 📋
在开始自动化提权之前,我们需要搭建一套完整的测试环境,建议在授权的靶场或实验域中进行:
| 组件 | 作用 | 说明 |
|---|---|---|
| BloodHound | 攻击路径分析 | 用于展示域内提权路径关系图 |
| Neo4j | 图形数据库 | 存储 BloodHound 收集的节点与边数据 |
| SharpHound / bloodhound.py | 数据收集器 | 将 AD 中的用户、组、ACL 等信息采集入库 |
| 一台域控 (DC) | 提权目标环境 | autobloody 通过 LDAP 连接它执行操作 |
| Python 3 | 运行环境 | autobloody 依赖 Python 3 运行 |
💡小提示:为了让路径计算更快,建议在 Neo4j 中安装 GDS(Graph Data Science)图算法插件。如果没有安装也不用担心,autobloody 会自动降级使用原生 CYPHER 查询,只是速度稍慢,功能完全不受影响。
另外,别忘了先把域内的数据导入 BloodHound,并确保 Neo4j 服务正在运行——这是整个自动化流程的数据基础。
一键安装步骤:3 分钟完成部署 🚀
autobloody 的安装非常简单,推荐直接使用 pip 安装:
pip install autobloody当然,如果你希望体验最新代码,也可以克隆仓库后本地安装:
git clone --depth 1 https://gitcode.com/gh_mirrors/au/autobloody pip install .安装完成后,在终端输入autobloody -h即可查看完整的帮助信息,所有参数一目了然,具体参数说明可以在 autobloody/main.py 源码中查看。
完整实战案例:普通域用户 → 域管理员 👑
下面我们进入最激动人心的环节——用一个真实的实战案例,演示 autobloody 如何帮助一名普通域用户完成到域管理员的自动化提权。
场景设定
- 起点(源对象):
JOHN.DOE@BLOODY.LOCAL——我们掌握的一个普通域用户 - 终点(目标对象):
BLOODY.LOCAL——整个域(即域管理员权限) - BloodHound 数据库中:已经存在从 JOHN.DOE 到域的提权路径(例如通过组成员关系、ACL 滥用等边连接)
第一步:查询提权路径
autobloody 会首先连接 Neo4j,利用 GDS 的 Dijkstra 算法在图中寻找源节点到目标节点的最短(代价最低)路径。这一步只需要指定 Neo4j 的连接信息和源、目标节点的名称:
autobloody --host 192.168.10.2 -dp 'neo4jP@ss' \ -ds 'JOHN.DOE@BLOODY.LOCAL' -dt 'BLOODY.LOCAL'⚠️重点提醒:
-ds(源节点)和-dt(目标节点)的值是大小写敏感的,必须与 BloodHound 中的 name 属性完全一致,否则会提示找不到路径。
执行后,autobloody 会输出类似这样的信息:[+] Done, 3 edges have been found between JOHN.DOE@BLOODY.LOCAL and BLOODY.LOCAL,表示找到了 3 条边组成的提权链路。
第二步:模拟执行(安全预览)
autobloody 默认不会直接动手,而是先进入模拟模式,把将要执行的每一个操作清晰列出来,例如:
[+] [Membership] on group Domain Admins for JOHN.DOE [+] [Add DCSync right] to BLOODY.LOCAL这个功能非常适合在正式执行前评估攻击影响,确认无误后输入y即可继续。这一逻辑可以在 autobloody/automation.py 中看到实现细节。
第三步:一键自动化提权
如果对预览结果满意,也可以加上-y参数跳过确认,直接全自动执行:
autobloody --host 192.168.10.2 -dp 'neo4jP@ss' \ -ds 'JOHN.DOE@BLOODY.LOCAL' -dt 'BLOODY.LOCAL' \ -d BLOODY.LOCAL -u john.doe -p 'Password123!' -y执行过程中,autobloody 会自动完成添加组成员、修改 ACL、重置密码等一系列操作,并在必要时自动切换身份(例如通过 ForceChangePassword 拿到目标账号密码后,无缝切换为该账号继续后续步骤)。当路径走到 DCSync 环节时,工具会提示你可以使用 secretsdump.py 直接导出 NTDS 数据库,彻底掌控整个域。
最后输出[+] Done, attack path executed,宣告提权成功!🎉
第四步:自动清理现场
值得一提的是,autobloody 会在执行过程中记录所有"可逆"操作(如添加组成员、授予 GenericAll 权限等),并在攻击路径完成后自动回滚,最大限度减少对生产环境的干扰。这个"污点清理"机制同样实现在 autobloody/automation.py 中。
autobloody 的工作原理:最短路径算法解析 🧮
也许你会好奇,autobloody 是如何在复杂的域权限关系图中找到那条最"划算"的提权路径的?答案藏在 autobloody/database.py 中。
BloodHound 数据库中的每一条边(如 MemberOf、GenericAll、WriteOwner)本身没有权重,但它们的"攻击代价"是不同的。autobloody 会为不同类型的边和节点赋予不同的代价(bloodycost),例如:
- MemberOf加入组:代价为 0(纯查询,无副作用)
- DCSync / GenericAll直达域:代价为 1(收益最高、代价最低)
- ReadGMSAPassword读取密码:代价为 10
- ForceChangePassword改密码:代价较高(可能影响业务)
然后利用Dijkstra 算法在加权图上计算源节点到目标节点的最短路径,从而找到代价最小、最隐蔽的攻击链路。这正是"自动化提权"的精髓——不再靠人工肉眼在 BloodHound 图上找路,而是让算法帮我们选出最优解。
支持的提权边一览 🔍
目前 autobloody 已支持以下 BloodHound 边的自动利用:
| 类别 | 支持的边 |
|---|---|
| 组成员类 | MemberOf、AddMembers、AddSelf |
| 凭据获取类 | ForceChangePassword、ReadGMSAPassword、DCSync |
| ACL 滥用类 | GenericAll、GenericWrite、WriteDacl、WriteOwner、Owns、AllExtendedRights |
| 其他 | GetChanges/GetChangesAll、Contains |
如果你用 BloodHound 找到了路径,但 autobloody 提示"路径不可利用",通常是因为路径中包含了尚未支持的边类型,需要借助其他工具手动完成该环节。
常见问题与实战技巧 💡
1. 路径查询太慢怎么办?
给 Neo4j 安装 GDS 插件可以显著提速,autobloody 会自动检测插件是否存在并切换算法实现。
2. 通过 proxychains 使用时连不上 Neo4j?
autobloody 内置了代理绕过机制(见 autobloody/proxy_bypass.py),在 Linux/macOS 下会自动识别 proxychains 环境并绕过代理直连 Neo4j,避免不必要的网络干扰。
3. 连接超时如何调整?
默认连接超时为 60 秒,网络环境不佳时可以通过--timeout参数适当调大,例如--timeout 120。
4. 想要更多日志输出?
使用-v输出 INFO 级别日志,使用-vv输出 DEBUG 级别日志,方便排查问题。更多用法细节可参考项目根目录的 README.md。
写在最后 ✍️
autobloody 将 Active Directory 提权从"手工活"变成了"一条命令",让安全测试人员可以把精力聚焦在路径分析与风险判断上,而不是机械地执行攻击步骤。当然,请务必牢记:本文所有内容仅限在授权的测试环境中使用,任何未经授权的利用行为都是违法的。
希望这篇 autobloody 实战演练能帮你快速上手这款优秀的自动化提权工具。如果觉得有用,欢迎收藏转发,也欢迎在实际项目中验证这套完整提权流程!🚀
【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考