文件上传绕过新技术
本文重点介绍文件上传绕过技术。
引言
在对Outlook Web进行安全研究期间,我遇到了一个异常行为,最终发现了一个安全漏洞。本文将解释我是如何发现这个问题、如何分析它以及它为什么会发生。该漏洞目前正在由微软处理,但发现和分析它的过程对其他安全研究人员可能很有用。本文主要关注如何绕过文件上传限制。
漏洞发现过程
最初,我想测试Outlook Web如何处理不同类型的文件。因此,我创建了一个test.svg文件,并通过两种不同的方式将其附加到电子邮件中:
第一种方法:附加文件(作为附件上传)
- 当我将SVG文件作为附件上传时,微软使其可供下载。
- 但在某些情况下,上传此类文件会被阻止。
第二种方法:复制/粘贴(Ctrl+C,Ctrl+V)文件到邮件正文
在这种情况下,文件不是作为下载提供,而是直接显示在邮件正文中!
这意味着SVG内容被嵌入到电子邮件中,没有任何安全过滤,并在接收方加载。
这种行为的差异对我来说似乎很不寻常,值得深入调查。
技术分析:为什么会发生这种情况?
Outlook Web中contentEditable和designMode的作用
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类型(例如image/svg+xml)。
-
剪贴板API保存信息 浏览器可以使用剪贴板API检查剪贴板中的内容。 根据数据类型,浏览器可以从剪贴板检索文本、图像甚至完整文件。
步骤2:粘贴(Ctrl+V)到Outlook Web
当您在邮件正文中按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代码:
|
|
此代码导致虚假页面在domain attachment.outlook.live.net内加载,这可能对用户显示为官方Microsoft页面。
b) 在SVG中执行JavaScript(XSS)
|
|
此代码证明可以在domain attachment.outlook.live.net上执行JavaScript。虽然此域无法访问outlook.live.com的cookie,但仍可以在此子域内运行JavaScript代码。
我是如何测试此攻击的?
- 保存恶意SVG文件
- 使用Ctrl+C和Ctrl+V将其粘贴到邮件正文中
- 发送电子邮件
- 右键单击图像并复制其URL
此链接由Outlook自动生成,并准备好发送给受害者进行利用。
结论
这项研究证明了上传文件和粘贴内容之间的差异如何导致安全漏洞。安全研究人员应始终调查意外行为,因为即使是最小的差异也可能导致重大的安全问题。