对于已经有了普通域权限的攻击者来说,接下来就是要通过账号破解、横向移动等攻击逐渐靠近域内重要系统(exchange或DHCP)从而撸向域控,当然也有一些漏洞可以一键打穿,纵向获得域内最高权限。
kerberos漏洞MS14-068
2014年微软发布了一个重大安全漏洞的补丁——3011780。根据官方说明,此安全更新解决了 Microsoft Windows Kerberos KDC (秘钥分发中心)中报告的一个漏洞,该漏洞可能允许攻击者将非特权域用户帐户的权限提升为域管理员帐户的权限。
所以利用此漏洞需要两个条件:
1.域控没有打KB3011780补丁。
2.拥有一个可以访问域内资源的账号权限。(domain users组里的任意一个账号就行)
kerberos认证
PAC鉴权
服务器收到客户端的TGS后,需要将客户端在TGS中声明的域组与服务器上的ACL进行配对,然后决定授予客户端什么样的资源访问权限。 Microsoft 使用 PAC 来表示客户端在 TGS 中声明的域组, PAC即特权属性证书。PAC 包含客户端用户的 SID 和组的 SID。 PAC决定了客户端的组属性,即客户端PAC的权限,为了保证自身的合法性,还包含两个签名NTLM,密钥为krbtgt。签名内容除了用户Sid和组SID外,还包括PAC的其他部分,作为TGT的一部分,经过加密。 NTLM 以 krbtgt 为密钥,从客户端向 KDC 的 as 模块发起身份验证请求。 as返回TGT时,会根据客户端生成PAC的组向KDC的as模块发送鉴权请求,包括客户端的用户Sid和组Sid,以及用来保证客户端的两个签名PAC 不被篡改。
漏洞原理
KDC在验证PAC时,对于PAC末尾的签名算法,虽然原则上规定可以使用带密钥的签名算法,但微软允许在实现中使用任何签名算法。只要客户端指定了任何签名算法,KDC 服务器就会使用指定的算法进行签名验证。PAC 没有放在 TGT 中仍然可以正确解析没有放入TGT的PAC信息,PAC必须是密文。密钥加密的 KDC 会从验证器中取出子密钥,解密 PAC 信息并使用客户端设置的签名算法验证签名。KDC 验证无 PAC 的 TGT 成功后,验证不在 TGT 中的 PAC 的有效性。如果验证成功,KDC取出PAC中的User SID和Group SID,重新使用签名。签名算法和密钥与将 inclue-pac 标志位设置为 TRUE 完全相同。将新生成的PAC加入到解密后的TGT中,然后重新加密并制作一个新的TGT发送给客户端。
漏洞利用
目前ms14-068已经有很多现成的利用工具,exe的,python的就不测试了,本文利用msf的验证模块 admin/kerberos/ms14_068_kerberos_checksum
设置options,User Sid可以通过命令whaomi /user
获取,Rhost为域控IP
先清空kerberos原有的票据,再将生成的证书票据注入然后获取域控的管理权限,