多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

autobloody 实战:如何读取 GMSA 密码并接管服务账户

autobloody 实战:如何读取 GMSA 密码并接管服务账户 autobloody 实战如何读取 GMSA 密码并接管服务账户【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody在 Active Directory 渗透测试中GMSA组托管服务账户密码读取是一条非常实用的提权路径——拿到 GMSA 的明文凭据往往意味着能进一步接管依赖该账户运行的服务。autobloody 正是一款能够自动利用 BloodHound 提权路径的 AD 提权自动化工具它能帮你一键读取 GMSA 密码、接管服务账户全程无需手写复杂的 LDAP 查询。本文将以「读取 GMSA 密码并接管服务账户」为实战场景带你从零掌握 autobloody 的使用方法。为什么 GMSA 密码如此诱人GMSAGroup Managed Service Account是微软为服务账户提供的一种安全机制它的密码由域控制器自动轮换不会出现在凭据转储的明文结果里传统的 mimikatz 抓取对它无效。但也正因如此只要拥有对 GMSA 的 ReadGMSAPassword 权限攻击者就能合法地借出它的密码哈希进而以该服务账户的身份执行任意操作。在 BloodHound 的图数据库中这种关系体现为一条ReadGMSAPassword边。而 autobloody 的核心价值就是把这些图数据里看得见却难以下手的攻击路径变成一条条可以自动执行的命令。autobloody 是什么为什么适合新手autobloody 是一个开源的 AD 提权自动化工具它的工作逻辑只有两步找路基于 BloodHound 收集的图数据用 Neo4j 的 Dijkstra 算法GDS 插件计算出从我们拥有的账户到目标账户的最优提权路径执行借助 bloodyAD 库连接域控 LDAP 服务把路径上每一条边如 ReadGMSAPassword、GenericAll、ForceChangePassword自动变成真实操作。对于新手来说最大的好处是不用记繁琐的 LDAP 语法——autobloody 已经把常见的 14 种 BloodHound 边类型都封装好了你只需要提供源账户和目标账户剩下的交给它。第一步一键安装 autobloody安装非常简单通过 pip 一条命令即可完成pip install autobloody也可以克隆仓库后本地安装仓库地址https://gitcode.com/gh_mirrors/au/autobloodygit clone --depth 1 https://gitcode.com/gh_mirrors/au/autobloody pip install .小提示项目根目录的 requirements.txt 里记录了运行时依赖主要依赖 bloodyAD 和 neo4j 驱动pip 安装时会自动拉取。运行前需要准备的环境一台正在运行的 Neo4j 数据库且已导入 BloodHound 数据如用 SharpHound 或 bloodhound.py 收集能连通域控DC的 LDAP 服务推荐在 Neo4j 中安装GDS 图算法库没有也能跑只是会退回较慢的原生 CYPHER 查询。第二步找到 ReadGMSAPassword 路径autobloody 在运行前需要两个关键参数-ds源节点即你当前控制的账户如JOHN.DOEBLOODY.LOCAL-dt目标节点即你想要接管的账户或机器如某个 GMSA 账户svc_gmsaBLOODY.LOCAL。⚠️ 官方特别提醒-ds和-dt的值是区分大小写的必须与 BloodHound 中的 name 属性完全一致。路径搜索的核心逻辑在 database.py 的getPrivescPath方法中它会为每条 BloodHound 边设置一个难度权重bloodycost其中ReadGMSAPassword 的权重只有 10属于读取类低开销操作因此在大多数路径规划中会被优先选中。这正是它能快速定位 GMSA 密码读取路径的原因。第三步实战命令——读取 GMSA 密码并接管确认路径存在后就可以正式发起接管了。完整命令示例如下autobloody --host 192.168.10.2 -dp neo4jPss \ -ds JOHN.DOEBLOODY.LOCAL -dt svc_gmsaBLOODY.LOCAL \ -u john.doe -p Password123! -y参数含义速查参数作用--host域控的主机名或 IP-dpNeo4j 数据库密码-ds/-dt源账户 / 目标GMSA账户-u/-p用于 NTLM 认证的账号密码-y跳过确认提示直接执行攻击路径-v/-vv开启详细日志输出如果你不想直接执行可以先不加-y运行autobloody 会进入模拟模式把整条路径要做的操作如[Read GMSA Password] from svc_gmsa打印出来确认无误后再输入y确认执行。幕后机制GMSA 密码到底怎么读出来的很多读者会好奇autobloody 是怎么拿到 GMSA 密码的答案就在 automation.py 的_readGMSAPassword方法里核心只有两步通过 bloodyAD 的get.object读取 GMSA 账户的msDS-ManagedPassword属性——该属性在正常情况下对普通用户不可见但拥有 ReadGMSAPassword 权限的账户可以合法读取从返回结果中提取NT 哈希然后以:NT哈希的格式作为新凭据调用_switchUser无缝切换身份到该 GMSA 账户。换句话说autobloody 巧妙地利用了允许读密码这个合法权限把读取操作直接转化为身份接管整个过程不需要任何漏洞利用或暴力破解。接管之后还能做些什么接管 GMSA 服务账户后常见的下一步动作包括以该服务账户身份访问它被授权的服务、共享和资源继续作为新源节点寻找通往 Domain Admin 的下一条提权路径autobloody 支持链式切换身份配合 DCSync 权限autobloody 同样支持 GetChanges/GetChangesAll 边直接导出 NTDS 数据库。值得一提的是autobloody 执行完成后会自动清理可逆的修改如临时加入的组成员关系尽力保持环境的隐蔽性。局限性哪些边还不能自动化autobloody 目前只支持约 14 种 BloodHound 边类型的自动利用包括 MemberOf、ForceChangePassword、DCSync、GenericAll、WriteDacl、ReadGMSAPassword等。如果你查询到的路径涉及 GPO 等需要人工干预的边工具会明确提示该路径无法仅由 autobloody 完成需要借助其他工具配合。写在最后通过本文的实战演示可以看到用 autobloody 读取 GMSA 密码并接管服务账户本质上是把 BloodHound 图分析 LDAP 操作两条链路整合成了一键执行。对红队和渗透测试新手来说它大幅降低了 AD 提权路径利用的门槛对防御方来说理解它的原理也有助于排查msDS-ManagedPassword的异常读取行为。工具虽好请务必在授权环境中使用哦【免费下载链接】autobloodyTool to automatically exploit Active Directory privilege escalation paths shown by BloodHound项目地址: https://gitcode.com/gh_mirrors/au/autobloody创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表