AD 域渗透 autobloody 认证完全指南:明文密码、Pass-the-Hash、票据与证书 4 种连法
【免费下载链接】claude-quickstartsA collection of projects designed to help developers quickly get started with building deployable applications using the Claude API项目地址: https://gitcode.com/GitHub_Trending/an/claude-quickstarts
你已经进了 AD 域,手里攥着一张凭据。密码就直接用,Pass-the-Hash 就换个写法用 Hash 登录,怎么让 autobloody 连上域控,都得先解决同一个问题。下面这 4 种认证方式一次讲清。
一条命令的骨架:4 种方式只差一个槽位
想搞懂差别,先看 autobloody 干什么:从 Neo4j 读 BloodHound 图谱,用最短路算法找出最优提权路径;再调用 bloodyAD 在真实域控上逐步执行——加组成员、改密码、DCSync——结束后把可逆操作清掉。这两步的前提,都是先连上域控的 LDAP 服务。
不管走哪条路,命令骨架是固定的:
autobloody <凭据参数> --host <域控> -dp '<neo4j 密码>' -ds '<源节点>' -dt '<目标节点>'逐一说下含义:
--host:域控的主机名或 IP,必填,跑不掉;-dp:Neo4j 数据库密码,用来读 BloodHound 数据;-ds/-dt:BloodHound 里源节点和目标节点的标签,即"我是谁"和"我想拿下谁";-d(域名)和-u(用户名)不填时会自动从-ds推导,省一步。
所以 4 种方式真正的差别,只在<凭据参数>这一个槽位:
| 手里攥着什么 | 用哪个参数 | 要准备的东西 |
|---|---|---|
| 明文密码 | -p | 用户名 + 密码 |
| 只有 NTLM Hash | -p(换个写法) | 用户名 + Hash |
| Kerberos 票据 | -k | ccache 票据文件 |
| PKI 证书 | -c | 私钥 + 证书文件 |
下面按凭据分组,逐个过。
有密码,或只有 Hash 🔑
这俩是双胞胎,都走-p,只差取值格式。
手里有明文密码,最直接:
autobloody -p 'Password123!' --host 192.168.10.2 -dp 'neo4jP@ss' -ds 'JOHN.DOE@BLOODY.LOCAL' -dt 'BLOODY.LOCAL'main.py的参数解析(第 54~129 行的 argparse 配置)里,-p的帮助文本写得明明白白:"Cleartext password or LMHASH:NTHASH for NTLM authentication"——也就是说明文和 Hash 走的是同一条 NTLM 通道,底层由 bloodyAD 统一接管。
手里只有 Hash,不用去破解,把-p的取值写成LMHASH:NTHASH即可;如果只有 NT Hash,LM 段留空、前面带个冒号:
autobloody -p ':aad3b435b51404eeaad3b435b51404ee' --host 192.168.10.2 -dp 'neo4jP@ss' -ds 'JOHN.DOE@BLOODY.LOCAL' -dt 'BLOODY.LOCAL'两个细节要记牢::NTHASH里的冒号不能丢,它是空 LM 段的占位。还有一点容易被忽略——路径执行中途 autobloody 会自己换身份:比如通过 ReadGMSAPassword 读到 GMSA 账号的 NT Hash 后,它会拼出:hash格式、调用_switchUser换个账号继续往下打,你不用手动重跑命令,这两段逻辑在automation.py里。
手里只有 Kerberos 票据怎么连 🎫
纯 Kerberos 环境、或者想绕开 NTLM 限制时,票据登场。这一组的组合是-k+ 环境变量KRB5CCNAME:
export KRB5CCNAME=/path/to/ticket.ccache autobloody -k --host dc.bloody.local -d BLOODY.LOCAL -u john.doe -dp 'neo4jP@ss' -ds 'JOHN.DOE@BLOODY.LOCAL' -dt 'BLOODY.LOCAL'坑都在细节上:
-k只是个开关,main.py里默认 False,加了才生效;- 票据要先用
kinit或gettgtpkinit.py拿到 TGT,官方tests/test_functional.py里"gettgtpkinit 生成 ccache 再跑测试"的完整流程值得翻一遍; --host写域名,别写 IP,不然 Kerberos 名字解析可能直接翻车。
拿到 PKI 证书怎么认证 🪪
证书认证是 AD 渗透里最热的攻击面之一——PKI 签发的证书到手,不知道密码也能完成认证,对应证书伪造、AD CS 滥用这类攻击链。用-c指定文件对,格式是私钥在前、证书在后,冒号分隔:
autobloody -c '/path/to/priv.key:/path/to/cert.pem' --host 192.168.10.2 -dp 'neo4jP@ss' -ds 'JOHN.DOE@BLOODY.LOCAL' -dt 'BLOODY.LOCAL'⚠️ certificate、kerberos、password 三者是互斥的凭据来源,bloodyAD 会按你传入的参数自动选认证协议,别一次传多个。
顺手记住的两个参数
-s, --secure:用 LDAP over TLS(LDAPS)连域控,默认是明文 LDAP,审计、合规场景建议加上;--timeout:连接超时秒数,默认 60 秒,网络拉胯的测试环境写--timeout 120,仓库里对这个参数有专门的测试覆盖。
翻车现场排查:按症状对号入座
| 症状 | 原因 | 处置 |
|---|---|---|
提示No path exploitable by autobloody found | BloodHound 数据里没有 autobloody 能利用的路径,它目前只支持 MemberOf、ForceChangePassword、DCSync、GenericAll、WriteDacl 等十几种边 | 回查采集范围,确认目标关系在支持列表里 |
-ds/-dt一直报错 | 这两个值必须和 BloodHound 的name属性完全一致且区分大小写 | 逐字符核对大小写和@符号,例如JOHN.DOE@BLOODY.LOCAL |
| 4 种方式拿不准选哪个 | 别看工具,看手里的凭据 | 有密码 →-p明文;只有 Hash →-p写:NTHASH;有票据 →-k;有证书 →-c |
上手建议:把 4 类凭据各跑一遍
别光记,去跑。在测试环境里按顺序把 4 类凭据过一遍:
- 明文密码登录,先熟悉命令骨架;
- 把
-p的取值换成:NTHASH格式,体会 Hash 登录和明文登录的差异; - 用
gettgtpkinit.py拿一张 TGT,试-k+KRB5CCNAME的组合; - 最后走一遍
-c的证书流程。
跑完这 4 遍,"认证"对 autobloody 意味着什么、你手里的哪类凭据对应 BloodHound 数据里的哪条路径,就都清楚了。
【免费下载链接】claude-quickstartsA collection of projects designed to help developers quickly get started with building deployable applications using the Claude API项目地址: https://gitcode.com/GitHub_Trending/an/claude-quickstarts
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考