前言
为了方便叙述,假定A为客户端,B为服务端
白银票据
从上一篇文章中我们可以懂得微软对于windosw系列的Kerberos协议的具体实现过程
那么我们可以总结出来一点就是,实际上A作为客户端访问B的时候,其权限完全是基于KDC所颁发的PAC的,B也只认这个PAC,并以这个PAC为参考来决定是否允许A访问B上的一些资源,那也就是说如果我们能够伪造发送给B的serrviceTicket中的PAC,我们就可以随意对B的资源进行访问了
让我们来看看构成ServerTicket的必要条件:KDC密码的副本以及B的密码的副本(两者的hash),主要缺少的就是B的密码的hash值,那么如果我们有了这个hash值,我们就可以伪造PAC,伪造PAC后面的校验签名,从而实现对B资源完全的访问权。那么这样的票据就被称为白银票据,拥有这样的票据表示着客户端A对B有着完全的访问权,但是注意了,由于我们同样也不知道KDC的密码hash,所以实际上我们伪造的PAC最后是没有有效的KDC的校验签名的,只有由B的密码hash生成的校验签名,而如果此时服务端开启了KDC PAC签名校验,那么PAC的校验将无法通过,白银票据也就会失效,所以白银票据成功的大前提是请求的服务不校验KDC PAC签名。
白银票据的限制就在于只能拥有某一台服务器所提供的部分服务的访问权,而不能拥有所有的,换一台C服务器或者需求权限更高的服务,白银票据就会失去效用。
给一些好的参考:
银票
黄金票据
白银票据的限制在黄金票据中不复存在,一旦拥有了黄金票据,你就拥有了这个域当中的最高权限。
让我们来回顾一下A发送给B的ServiceTicket是如何生成的
首先,是A要向TGS发送由AS颁发的TGT,证明自己已经通过了合法性校验,是域中的合法用户,然后由TGS利用KDC的永久密钥(也称为krgtgt账户的密码hash,krgtgt账户相当于是域管理员)解密TGT,校验签名,确定TGT中的PAC没有被篡改之后,重新签名PAC,并将A与B之间通讯所需要的密钥SessionKey以及重新签名后的PAC用B的密码hash进行加密,将两者组合为了ServiceTicket。
那么我们可以看到,这整个过程的关键点就是TGT中所携带的PAC,只要我们能够篡改TGT中的PAC,欺骗TGS,就能拿到访问任意服务器的ServiceTicket。而要想篡改TGT,唯一的障碍就是krgtgt用户的密码hash,有了这个密码的hash,我们就可以解密TGT,伪造任意PAC来欺骗TGS为A颁发在此域中访问任意一台服务器的任意ServiceTicket,获取在此域中的最高权限
我们把这种票据称为黄金票据
提供一些好的参考:
增强型黄金票据
虽然黄金票据在当前域中拥有着最高的权限,但是普通的黄金票据无法跨域使用,因为在一个子域中缺少了EnterpriseAdmins组,这是只有在域林中的根域才存在的用户组,对整个域有着管理权,其SID最后三位为519,而在子域中最高级别的用户仅仅是Domain Admins,SID最后三位为512,那也就表明当使用mimikatz伪造黄金票据时,mimikatz会使用SID号(类似于S-1-5-21-3641416521-285861825-2863956705-)和RID号(512,519之类的)拼接成新的SID(S-1-5-21-3641416521-285861825-2863956705-519),但是这个SID号在根域里根本就不存在(根域DC上的EnterpriseAdmins组的SID可能是S-1-5-21-4249968736-1423802980-663233003-519),所以无法使用普通的黄金票在域林中跨域访问资源。
在2015年Black Hat USA中国外的研究者提出了突破域限制的增强版的黄金票据。通过域内主机在迁移时LDAP库中的SIDHistory属性中保存的上一个域的SID值制作可以跨域的金票。
需要的材料只是根域的SID号,一个子域的krgtgt密码hash即可,使用mimikatz制作
下面是Blackhat资料,里面内容很多,以后慢慢整理成文章
利用工具
一般是使用mimikatz来抓取用户的密码hash