Mimikatz小实验:黄金票据+dcsync

2018-02-08 15:49:42 浏览数 (1)

这篇博文是为了解释下Benjamin Delpy(@gentilkiwi)在这条推特上写的东西,看官们且耐住性子。

FreeBuf科普时间

krbtgt账户:每个域控制器都有一个“krbtgt”的用户账户,是KDC的服务账户,用来创建票据授予服务(TGS)加密的密钥。 黄金票据(Golden Ticket):简单来说,它能让黑客在拥有普通域用户权限和krbtgt hash的情况下,获取域管理员权限。 dcsync:mimikatz中的功能,可以有效地“假冒”一个域控制器,并可以向目标域控制器请求帐户密码数据。

下面根据@gentilkiwi的描述,我会做一个实验。

获取域管理权限

首先,我以较低的权限运行了mimikatz,这个权限为Windows工作站的本地用户,也就是我demo域成员。

在这里,我们需要生成一张黄金票据(Golden Ticket),利用它来获得域管理权限。然后,咱们再使用mimikatz的dcsync功能,从域控制器获取hash。

作为一个新登录的本地用户,本来是没有票据的:

然后我手动创建了一张域管理的黄金票据:

使用这张票据:

然后我的低权限本地用户,就被提升到域管理权限了:

利用dcsync功能获取hash

然后我通过DRSR协议,从域控制器获取用户user01的hash:

我们把LM和NTLM的hash,同这篇博文里的hash对比下,发现它们是相同的。

kerberos::golden命令中所有的参数(krbtgt、domain、domain adminusername、domain SID),都可以通过这里的方式获取,简单来说就是提取并解析Active Directory 数据库(NTDS.DIT)的副本内容。

@gentilkiwi告诉我,只要domain admin username和RID是域管理组的一部分,那也是可以被伪造的。

伪造的信息大约可以生效20分钟左右,在此期间不会被系统检查到。

如果我们没有足够的权限(比如域管理)来查询带DRSR的域控制器,我们会得到error 5(权限不足)的提示:

你在对krbtgt NTLM hash进行更改的时候,也会得到这个错误。但在这里,ptt命令看起来像是成功了:

你需要注意的是,除非用户krbtgt的密码被改了(默认不会更改),不然krbtgt NTLM hash绝不会改变。所以,即使你拿到的是非常早的ntds.dit副本,也可以被用于恢复hash。

检测黄金票据的规则

该票据通过asn1编码存储在文件里:

@gentilkiwi本来做了一个YARA规则(mimikatz_kirbi_ticket)来检测这样的票据:

但是我用的mimikatz v2.1,使用了另一种asn1编码,这条规则就失效了。

然后@gentilkiwi就更新了一条更通用的规则,大家可以使用它来做检测:

代码语言:javascript复制
rule mimikatz_kirbi_ticket

简单的小细节

此外,因为我使用了kerberos::golden的选项/ticket,票据文件是在磁盘上创建生成的。但是如果我使用了/ptt选项,它并不会写入磁盘。

@gentilkiwi还告诉我,如果你使用kerberos::dcsync去提升到域管理权限,是不会记录事件日志的。

*参考来源:DS,FB小编dawner编译,未经许可禁止转载

0 人点赞