Mimikatz小实验:黄金票据+dcsync

发表于:2016-08-26 10:30:00 来源:  黑客与极客 阅读数(0人)



这篇博文是为了解释下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就更新了一条更通用的规则,大家可以使用它来做检测


rule mimikatz_kirbi_ticket

{

    meta:

       description     = "KiRBiticket for mimikatz"

       author          = "BenjaminDELPY (gentilkiwi); Didier Stevens"

 

   strings:

       $asn1           = { 76 82 ?? ?? 3082 ?? ?? a0 03 02 01 05 a1 03 02 01 16 }

       $asn1_84        = { 76 84 ?? ?? ???? 30 84 ?? ?? ?? ?? a0 84 00 00 00 03 02 01 05 a1 84 00 00 00 03 02 01 16 }

 

   condition:

       $asn1 at 0 or $asn1_84 at 0

}

简单的小细节


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


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


相关新闻

大家都在学

课程详情

操作系统安全

课程详情

网络攻击与对抗

课程详情

网络攻防工具