利用 NTLM Relay 配合 ADCS 这个漏洞的情况需要什么条件
1. NTLM Relay 攻击的基本原理
NTLM Relay 的核心是中间人攻击。攻击者位于客户端和服务器之间,截获并重放 NTLM 认证会话
- 客户端发起认证请求:域内的一台机器(客户端)向攻击者控制的机器发起一个 SMB 或 HTTP 等协议的连接
- 攻击者截获并转发:攻击者截获客户端的 NTLM Challenge/Response 认证信息(但无法破解出明文密码)
- 攻击者重放认证:攻击者将这个认证信息原封不动地转发给另一台域内机器(目标服务器),冒充客户端进行认证
- 目标服务器验证通过:目标服务器认为这个认证信息是合法的,并允许攻击者以客户端的身份进行访问
这里的关键是,攻击者没有破解密码,而是直接利用认证过程,将受害者的身份“重放”给了目标服务器
2. ADCS 漏洞(ESC8)的核心原理
Active Directory Certificate Services (ADCS) 是微软提供的一个证书颁发机构(CA),用于管理公钥基础设施(PKI)
漏洞(也被称为 ESC8)存在于一些不安全的证书模板配置中。当一个证书模板被配置为:
Certificate Authority Authorization
(CA Authorization
) 权限不安全,允许低权限用户或匿名用户注册- 并且模板允许
客户端认证
(Client Authentication
) - 最重要的是,模板设置了
NTLM 签名禁用
(NTLM Signing Disabled
)
在这种配置下,攻击者可以利用 NTLM Relay 攻击,将受害者的身份信息中继到 ADCS 服务器,以受害者的身份请求一个证书。这个证书将用于后续的 Kerberos 认证
3. NTLM Relay 配合 ADCS 的完整攻击链
将两者结合后,攻击链变得异常强大,因为攻击者不再需要找到一个可以被利用的文件共享或远程桌面服务,而是将认证重定向到一个特定的 ADCS Web 页面
- 诱导受害者发起认证:攻击者需要想办法让域内一个用户或计算机(受害者)向自己发起一个认证请求
- 强制认证:通过强制用户访问一个恶意 UNC 路径(例如
\\<攻击机IP>\share
),Windows 系统会自动尝试使用 NTLM 认证来访问这个共享 - 钓鱼攻击:通过发送恶意链接(例如
file:///<攻击机IP>/payload.html
)给受害者
- 强制认证:通过强制用户访问一个恶意 UNC 路径(例如
- 启动 NTML Relay 服务器:攻击者使用专门的工具(如
ntlmrelayx.py
)来监听并重定向认证 - 重定向认证到 ADCS:当受害者发起认证请求时,
ntlmrelayx.py
会捕获 NTLM 认证信息,并将其重定向到 ADCS 的一个特定 HTTP 页面- 重定向 URL 示例:
http://<ADCS服务器IP>/certsrv/certfnsh.asp
- 重定向 URL 示例:
- 以受害者身份请求证书:ADCS 服务器接收到重定向的 NTLM 认证后,会认为这是受害者在请求证书。由于模板配置不安全,它会为攻击者颁发一个带有受害者身份信息的有效证书
- 利用证书获取 Kerberos 票据:攻击者获取到这个证书后,可以使用
Rubeus.exe
或其他工具,利用证书请求一个Kerberos 票据(TGT) - 实现 Kerberos 认证:有了这个 TGT,攻击者就可以以受害者的身份访问域内的所有服务。如果这个受害者是域管理员,攻击者就实现了域的完全控制,包括创建新用户、修改组权限等
4. 攻击链的利用条件总结
要成功执行这种攻击,必须满足以下所有条件:
- NTLM Relay 环境:攻击者必须能够位于一个可以拦截和重定向 NTLM 认证请求的网络位置
- 受害者认证:攻击者需要找到一个可以被诱导、向攻击机发起 NTLM 认证的受害者,通常是域内的一台机器或一个用户
- 不安全的 ADCS 模板配置:这是最关键的条件,也是漏洞的根源。ADCS 模板必须存在以下缺陷:
Enrollment Rights
(注册权限):允许低权限用户或匿名用户请求证书Client Authentication
:证书可以用于客户端认证NTLM Signing Disabled
:ADCS 服务器的 HTTP 接口没有启用 NTLM 签名验证
- 域内存在未打补丁的 ADCS 服务器:服务器必须运行一个易受攻击的 ADCS 版本,并且其证书模板存在上述配置缺陷