文件上传绕过新技术
本文重点介绍文件上传绕过技术。
引言
在对Outlook Web进行安全研究期间,我遇到了一个异常行为,最终发现了一个安全漏洞。本文将详细说明我发现该问题的过程、分析方法及其产生原因。该漏洞目前正由微软处理,但发现和分析过程对其他安全研究人员具有参考价值。本文主要关注如何绕过文件上传限制。
漏洞发现过程
最初,我想测试Outlook Web如何处理不同类型的文件。于是,我创建了一个test.svg文件,并通过两种不同方式将其附加到电子邮件中:
第一种方法:附加文件(作为附件上传)
- 将SVG文件作为附件上传时,微软会使其可供下载
- 但在某些情况下,上传此类文件会被阻止
第二种方法:复制/粘贴(Ctrl+C, Ctrl+V)文件到邮件正文
在这种情况下,文件不是作为下载提供,而是直接显示在邮件正文中!
这意味着SVG内容被嵌入到电子邮件中,且未经过任何安全过滤,直接在接收方加载。
这种行为差异引起了我的注意,值得深入调查。
技术分析:为什么会发生这种情况?
contentEditable和designMode在Outlook Web中的作用
Outlook Web在邮件编辑区域使用contentEditable功能。此特性允许将HTML内容直接插入邮件正文。
当我附加SVG文件时,微软服务器会处理该文件并应用安全规则。
然而,当我复制粘贴SVG时,其内容作为HTML正文的一部分插入,且未应用任何安全过滤器!
这意味着微软仅对附加文件应用安全限制,但对粘贴内容未执行相同检查。
什么是contentEditable及其工作原理?
contentEditable是HTML中的一个属性,允许用户直接编辑任何HTML元素,类似于文本编辑器。
按下Ctrl+C和Ctrl+V时浏览器会发生什么?
步骤1:复制(Ctrl+C)
当您从计算机选择文件(如test.svg)并按Ctrl+C时:
- 操作系统将文件放入剪贴板
- 在Windows和macOS中,按下Ctrl+C时,与test.svg相关的数据存储在系统的剪贴板API中
- 这些数据可以包括原始文件字节、元数据甚至其MIME类型(如图像/svg+xml)
剪贴板API保存信息:
- 浏览器可以使用剪贴板API检查剪贴板内容
- 根据数据类型,浏览器可能从剪贴板检索文本、图像甚至完整文件
步骤2:在Outlook Web中粘贴(Ctrl+V)
当您在邮件正文中按Ctrl+V时,会发生几个重要事件:
场景1:粘贴到contentEditable字段(Outlook Web) 由于Outlook Web使用contentEditable,浏览器会检查复制的数据:
- 浏览器查询剪贴板API:“剪贴板中是否有文件或HTML内容?”
- 如果有文件(如test.svg),浏览器检查是否允许将该文件类型直接粘贴到contentEditable字段
- 由于SVG是基于文本的文件(基于XML),浏览器可能将其内容视为HTML文本而非文件
因此,浏览器将test.svg的内容直接插入邮件正文——就像用户粘贴了HTML代码段! 这正是允许SVG中的任何恶意代码被执行的原因!
如何利用此行为?
通过利用这种意外行为,我能够在SVG文件中嵌入代码,实现多种攻击类型。以下是两个示例:
a) SVG中的iframe
一个限制是它不会使用IP或HTTP加载地址,因此我必须购买域名并在以下地址托管虚假测试页面:https://yamikaza.com/fake.html
以下是嵌入的SVG代码:
|
|
此代码导致虚假页面在attachment.outlook.live.net域内加载,对用户显示为官方Microsoft页面。
b) 在SVG中执行JavaScript(XSS)
|
|
此代码证明可以在attachment.outlook.live.net域上执行JavaScript。虽然此域无法访问outlook.live.com的cookie,但仍可在此子域内运行JavaScript代码。
如何测试此攻击?
- 保存恶意SVG文件
- 使用Ctrl+C和Ctrl+V将其粘贴到邮件正文
- 发送电子邮件
- 右键单击图像并复制其URL
- 此链接由Outlook自动生成,可发送给受害者进行利用
结论
本研究展示了文件上传和内容粘贴之间的差异如何导致安全漏洞。安全研究人员应始终调查异常行为,因为即使是最小的差异也可能导致重大安全问题。