- A+
这篇博文是为了解释下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去提升到域管理权限,是不会记录事件日志的。
*参考来源:DS,FB小编dawner编译,转载请注明来自FreeBuf(FreeBuf.COM)