autobloody 的 4 种认证方式完整指南:密码、NT Hash、Kerberos 票据与证书一次讲清
【免费下载链接】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
autobloody 是一款 Active Directory 域渗透工具。它从 Neo4j 读取 BloodHound 数据,用 Dijkstra 最短路算法找出提权路径,再交给 bloodyAD 自动执行加组、改密、DCSync 等操作。所有动作的前提,是先用某种认证方式连上域控的 LDAP 服务。所以认证参数怎么填,直接决定你这套自动化链路能不能跑起来。本文按"你手上有什么凭据"来组织,覆盖明文密码、Pass-the-Hash、Pass-the-Ticket 和证书认证 4 条路线,每条都配可直接运行的命令。
🧭 按你拿到的凭据选认证方式
渗透过程中,你拿到手的东西不一样,选路就不一样:
| 认证方式 | 命令行参数 | 适用场景 | 所需凭据 |
|---|---|---|---|
| 明文密码 | -p '密码' | 账号和密码都已知 | 用户名 + 明文密码 |
| Pass-the-Hash | -p 'LMHASH:NTHASH' | 只有 NTLM Hash,没破解出密码 | 用户名 + Hash |
| Pass-the-Ticket | -k | 纯 Kerberos 环境,或需绕过 NTLM 限制 | ccache 票据文件 |
| 证书认证 | -c 'key:cert' | 拿到 AD CS / PKI 签发的证书 | 私钥 + 证书文件 |
两个通用前提,先记住:
--host:域控地址,必填,4 种方式都要带。-d(域名)和-u(用户名)可以省略,工具会从-ds源节点里自动推导。
🔑 只有密码或 NT Hash 时,-p 参数怎么写
这两种方式共用-p参数,区别只在值怎么填。参数定义都在 main.py 的 argparse 段里。
有明文密码:直接把密码写进 -p
autobloody -p 'Acme2026P@ss' --host 10.10.10.5 -dp 'neo4jP@ss' -ds 'ALICE.WANG@ACME.CORP' -dt 'ACME.CORP'逐行看参数:
-p:明文密码,走 NTLM 认证通道--host:域控 IP 或主机名-dp:Neo4j 数据库密码-ds:BloodHound 源节点,即你当前控制的账号-dt:目标节点,通常填域名
只有 NT Hash:用:NTHASH格式免破解登录
格式是LMHASH:NTHASH。你一般只有 NT Hash,LM 那半留空,写成:NTHASH即可:
autobloody -p ':2f8a5c9d3e7b1f4a6c0d8e2b5a9c1f3d' --host 10.10.10.5 -dp 'neo4jP@ss' -ds 'ALICE.WANG@ACME.CORP' -dt 'ACME.CORP'底层仍由 bloodyAD 统一按 NTLM 通道处理,你不用关心协议细节。
还有一个实战细节:路径执行到中途,autobloody 会自己换身份。比如通过 ReadGMSAPassword 读到 GMSA 账号的 NT Hash 后,它会按:hash格式拼好密码,再调用_switchUser切账号继续走。这段逻辑在 automation.py 里,值得看一眼。
🎫 拿 Kerberos 票据或 PKI 证书登录:-k 与 -c 怎么用
票据认证:先备好 ccache,再开 -k 开关
前置条件:先用kinit或gettgtpkinit.py拿到 TGT,落到一个 ccache 文件里。官方测试(tests/test_functional.py)里就有用 gettgtpkinit.py 生成 ccache 的完整流程,可以参考。
-k是个开关参数,默认关闭,加上才启用。启用后 bloodyAD 从环境变量KRB5CCNAME指向的文件读票据:
export KRB5CCNAME=/tmp/alice.ccache autobloody -k --host dc.acme.corp -d ACME.CORP -u alice.wang -dp 'neo4jP@ss' -ds 'ALICE.WANG@ACME.CORP' -dt 'ACME.CORP'一个高频坑:--host建议填域名而不是 IP。Kerberos 对服务名解析很严格,填 IP 大概率握手失败。
证书认证:-c 后面跟"私钥:证书"文件对
密码不知道、但拿到证书的场景,走这条。格式是key:cert——私钥路径在前,证书路径在后,中间一个冒号:
autobloody -c '/tmp/alice.key:/tmp/alice.pem' --host 10.10.10.5 -dp 'neo4jP@ss' -ds 'ALICE.WANG@ACME.CORP' -dt 'ACME.CORP'帮助文本里有格式示例,照抄结构、替换路径即可。
🛡️ 容易翻车的参数细节:LDAPS、超时与大小写
零散但重要的注意点,集中在这里:
-s/--secure:尝试 LDAPS(LDAP over TLS)加密连接,默认是明文 LDAP。审计或合规场景建议加上。--timeout:连接超时秒数,默认 60 秒。网络差的靶机环境可以调成--timeout 120。-ds/-dt:大小写敏感,必须和 BloodHound 里的 name 属性逐字符一致,包括@符号。- 三者互斥:password(
-p)、kerberos(-k)、certificate(-c)是三个互斥的凭据来源,bloodyAD 按你传入的参数选协议,不要同时混用。
🚨 跑不通时,先查这三处
报错 "No path exploitable by autobloody found"?
说明 BloodHound 数据里没有它能自动利用的路径。autobloody 只支持 MemberOf、ForceChangePassword、DCSync、GenericAll、WriteDacl 等有限几种边,完整清单在 README 的 Limitations 章节。先回 Neo4j 里确认路径类型,再谈认证。
-ds / -dt 一直不匹配?
九成是拼写或大小写问题。把 BloodHound 界面里显示的 name 原样复制过来,别手打。
实在选不出用哪种认证?
一句话:有密码用-p明文,只有 Hash 用-p的:NTHASH格式,有票据用-k,有证书用-c。
练手建议
在测试域里先跑通密码和 Hash 两条命令,对比一下输出差异,再分别用 ccache 和证书各验证一次。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
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考