继上题,为什么 ADCS 这个漏洞能获取域管理员权限,原理是什么

1. ADCS 漏洞(ESC8)的核心原理

ADCS 漏洞(也被称为 ESC8,因为它是由 SpecterOps 发现的攻击链之一)是配置缺陷而非代码漏洞。攻击者利用的是 ADCS 证书模板中的一个或多个不安全配置

一个典型的可被利用的证书模板具有以下特征:

  • 权限配置不安全:这个证书模板的“注册(Enrollment)”权限被授予了低权限用户,甚至是匿名用户。这意味着,任何人都可以向证书颁发机构(CA)请求一个基于这个模板的证书
  • 用途配置不安全:这个证书模板的用途(Extended Key Usage)被设置为 Client Authentication,这意味着它颁发的证书可以用于客户端身份验证
  • 不安全的证书主体名(Subject Name):这个模板允许请求者自定义证书中的主体名(Subject Name)。主体名是用于在 Kerberos 认证中识别用户身份的关键字段

2. 攻击链的详细步骤

  1. 信息收集:攻击者首先需要通过侦察,找到域内存在的 ADCS 服务器,并识别出那些配置不安全的证书模板
    • 工具Certify.exe 是一个常用的工具,可以扫描域内的 ADCS 服务器,并列出所有证书模板的配置,高亮显示那些存在漏洞的模板
    • 关键信息:攻击者会寻找那些 Client Authentication 权限开启、且主体名可控的模板
  2. 以低权限用户身份请求高权限证书
    • 攻击者使用一个低权限的域用户,或者通过前面提到的 NTLM Relay 等方法,以任何一个普通域用户的身份,向 ADCS 服务器发起证书请求
    • 在请求时,攻击者利用模板允许自定义主体名的缺陷,将请求的主体名(Subject Name)设置为一个高权限用户,例如域管理员
    • 为什么能成功? 理论上,CA 应该验证请求者的身份和其请求的主体名是否匹配。但由于模板配置不安全,CA 没有进行这项验证,直接颁发了一个证书,其主体名是攻击者指定的域管理员
  3. 利用证书获取 Kerberos TGT
    • 攻击者获得这个伪造的证书后,就可以使用像 Rubeus.exe 这样的工具
    • Rubeus 可以利用这个证书,向域控制器发送 Kerberos 认证请求。这个过程被称为 PKINIT,是 Kerberos 协议的一个扩展,允许客户端使用证书进行身份验证
    • 为什么能成功? 域控制器会看到这个证书,并根据证书中的主体名(Subject Name)来识别用户身份。它会认为这个请求来自一个合法的域管理员,并为其颁发一个域管理员的 Kerberos 票据(TGT)
  4. 域完全控制
    • 一旦攻击者获得了域管理员的 TGT,就相当于获得了域管理员的密码哈希,可以伪造任何其他用户的票据(Golden Ticket),或者使用 psexecWMI 等工具,在不提供密码的情况下,以域管理员的身份执行任意命令,从而实现对整个域的完全控制
Copyright © 版权信息 all right reserved,powered by Gitbook该文件修订时间: 2025-09-25 03:13:17

results matching ""

    No results matching ""