ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

autobloody 工作原理深度剖析:Dijkstra 算法如何帮你秒级找到最短提权路径

2026/8/16 15:34:50 拓冰建站 浏览量
autobloody 工作原理深度剖析:Dijkstra 算法如何帮你秒级找到最短提权路径 autobloody 工作原理深度剖析Dijkstra 算法如何帮你秒级找到最短提权路径【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody在 Active DirectoryAD渗透测试中BloodHound 是公认的地图而autobloody则是帮你自动开车到终点的自动驾驶工具。autobloody 是一款自动利用 BloodHound 展示的 AD 提权路径的开源工具它的核心亮点在于从你已掌握的普通账户出发借助Dijkstra 算法在加权图中秒级计算出一条通往域管Domain Admin的最短提权路径并自动执行路径上的每一步攻击操作。本文将从源码层面深度剖析 autobloody 的工作原理让你彻底看懂这条自动化提权流水线。一句话理解 autobloody 的定位BloodHound 能告诉你谁能控制谁但它不会替你动手手工沿着攻击路径一条条去点 GenericAll、WriteOwner、ForceChangePassword既耗时又容易出错。autobloody 正好补齐了这个缺口找路交给算法走路交给脚本。整个流程只有两步找路从 Neo4j 数据库读取 BloodHound 数据用 Dijkstra 算法算出源对象到目标对象的最优提权路径走路用 bloodyAD 生态的 LDAP 操作能力连接域控逐步执行路径上的每个攻击动作。入口逻辑位于 main.py其中pathgen函数负责第一步Automation类负责第二步。为什么偏偏是 Dijkstra 算法BloodHound 导出的图是一张无权图边只有类型MemberOf、WriteOwner、GenericAll……没有难度概念。而 autobloody 要回答的问题是哪条提权路径最省事——这就需要给每条边加上权重把图变成加权图再用经典的 Dijkstra 算法求解最短路径。在 database.py 中_setWeight方法定义了一张bloodycost权重表核心规则如下目标节点类型边类型举例权重 cost含义组MemberOf0纯逻辑关系零成本域DCSync / GenericAll1一步到位拿到域管能力成本最低域WriteDacl / Owns2需要写 ACL稍贵域WriteOwner3需要改属主更贵任意ReadGMSAPassword10只读 LDAP 属性成本低组AddMember / GenericAll100需写组成员成本中等用户/计算机GenericAll / GenericWrite100000接近目标对象成本高用户/计算机ForceChangePassword110000改密码可能影响业务成本最高没有出现在表中的边会被赋予默认权重9999999999相当于此路不通从而保证 Dijkstra 算出来的路径一定可被 autobloody 自动利用。权重背后的安全逻辑成本即攻击难度这份权重表不是随便拍的它体现了红队视角的性价比排序见 database.py 的注释不需要查询 LDAP 的边如 MemberOf→ 零成本一步就能拿到域管权限的边如 DCSync→ 权重最低只需读取 LDAP 属性的边如 ReadGMSAPassword→ 低成本需要写 LDAP 的边如 WriteOwner→ 权重随写入步骤增加需要人工后续操作的边如 GPO 相关→ 权重抬高可能改密码、影响业务的边如 ForceChangePassword→ 权重最高。这套设计让算法天然偏好动静小、收益大的攻击路径实战价值极高。秒级找路GDS 加速与原生 Cypher 兜底找路的核心实现在Database._findShortestPathdatabase.py它采用双模式策略GDS 模式推荐检测到 Neo4j 安装了 Graph Data Science 插件后直接调用gds.shortestPath.dijkstra.stream以bloodycost作为relationshipWeightProperty在大图上也能秒级返回最短路径兜底模式没有 GDS 时退化为原生 Cypher 的shortestPathreduce累加权重限制 20 跳以内防性能爆炸速度较慢但依然可用。值得一提的还有 proxy_bypass.py当检测到proxychains通过LD_PRELOAD注入时它会用 ctypes 直接调用 libc 的getaddrinfo/connect绕过代理直连 Neo4j避免内网环境里代理绕代理的坑。自动执行从 cost 到攻击动作的魔法映射找到路径后automation.py 中的rel_types字典把每条边的 cost 映射为具体的攻击函数例如cost0→_nextHopMemberOf 纯跳转cost1→_dcSync提示直接 dump NTDScost10→_readGMSAPassword读取 GMSA 密码并切换身份cost100000→_shadowCredentialsOrForceChange优先 Shadow Credentials失败自动回退改密码cost110000→_forceChangePassword强制改密后切换身份_unfold方法会沿路径逐条执行每一步都基于bloodyAD连接域控 LDAP 完成真实操作。模拟演练与后悔药回滚机制autobloody 还内置了两个贴心设计模拟模式执行前先调用simulate()打印整条路径的攻击动作清单等用户输入y确认后才真正动手或加-y参数全自动脏数据回收dirty_laundry列表记录了所有可逆操作如genericAll、groupMember执行出错或切换身份时_washer()会逆序自动还原把对目标域环境的污染降到最低。实战一条命令完成自动提权数据导入 BloodHound 并启动 Neo4j 后只需一行命令autobloody -p Password123! --host 192.168.10.2 -dp neo4jPss -ds JOHN.DOEBLOODY.LOCAL -dt BLOODY.LOCAL其中-ds是源对象你已控制的账号-dt是目标对象如BLOODY.LOCAL域。autobloody 会先打印 Dijkstra 算出的最短提权路径确认后自动完成从普通用户到目标权限的完整提权链路全程无需手工操作。小结autobloody 的价值在于把看图找路和手动提权这两件苦差事合二为一用Dijkstra 算法 血成本权重表实现秒级寻路用bloodyAD 函数映射表实现全自动执行再用模拟与回滚机制保证安全可控。无论你是做红队评估还是学习 AD 权限提升理解这套加权图 最短路径 自动执行的架构都能让你在实战中事半功倍。【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考