Kerberos KDC域权限提升漏洞总结(二)
报名入口来源:中国教育在线 2022-06-01
01漏洞原理
(1)PAC原理
Server收到Client发来的TGS后,要根据TGS中Client申明所在的域组,和Server上的ACL进行对,然后决定给予Client什么样的资源访问权限。微软使用PAC来表示TGS中Client申明的域组。PAC(Privilege Attribute Certificate),特权属性证书。
PAC包含Client的User的SID、Group的SID。PAC决定了Client的组属性,即决定了Client的权限PAC为了保证自身的合法性,还包含2个签名,Key为krbtgt的NTLM,签名的内容除了User SID、Group SID外,还有其他部分PAC作为TGT的一部分,是加密的,密钥为krbtgt的NTLM作Client向KDC的AS模块发起认证请求,AS返回TGT时,会根据Client所在的组,生成PAC,包含Client的User SID、Group SID,以及用于确保PAC不被篡改的2个签名
(2)漏洞成因
Client在发起认证请求时,通过设置include-PAC为False,则返回TGT中不会包含PAC
KDC对PAC进行验证时,对于PAC尾部的签名算法,虽然原理上规定必须是带有Key的签名算法才可以,但微软在实现上,却允许任意签名算法,只要客户端指定任意签名算法,KDC服务器就会使用指定的算法进行签名验证。因此伪造的任意内容都可以是合法的,直接加上内容的MD5值作为签名即可(第一个原因)
PAC没有被放在TGT中,放在其它地方。KDC在仍然能够正确解析出没有放在TGT中的PAC信息PAC必须是密文,经过Key加密的KDC会从Authenticator中取出来subkey,把PAC信息解密并利用客户端设定的签名算法验证签名(第二个原因)
KDC验证缺少PAC的TGT成功后,再验证不在TGT中 的PAC的合法性。如果2个均验证成功,KDC把PAC中的User SID、Group SID取出来,重新使用进行签名,签名算法和密钥与设置inclue-pac标志位为TRUE时一模一样。将新产生的PAC加入到解密后的TGT中,再重新加密制作全新的TGT发送给Client,不是TGS(第三个原因)
04漏洞利用
在做域渗透测试时,当我们拿到了一个普通域成员的账号后,想继续对该域进行渗透,拿到域控服务器权限。如果域控服务器存在MS14-068漏洞,并且未打补丁,那么我们就可以利用MS14-068快速获得域控服务器权限。
MS14-068编号CVE-2014-6324,补丁为3011780,如果自检可在域控制器上使用命令检测,如返回结果为空则说明服务器存在MS14-068。