文件上传限制绕过新技术
本文重点探讨文件上传绕过技术。
引言
在对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的执行过程
第一步:复制(Ctrl+C)
当从计算机选择文件(如test.svg)并按Ctrl+C时:
- 操作系统将文件放入剪贴板
- 剪贴板API保存相关信息(包括原始文件字节、元数据甚至MIME类型)
第二步:在Outlook Web中粘贴(Ctrl+V)
在邮件正文中按Ctrl+V时:
- 浏览器检查剪贴板数据
- 由于SVG是基于文本的XML文件,浏览器将其内容视为HTML文本而非文件
- 浏览器直接将test.svg的内容插入邮件正文,就像用户粘贴了HTML代码段!
这正是恶意代码能在SVG中执行的原因!
漏洞利用方式
利用此异常行为,我可以在SVG文件中嵌入代码实现多种攻击,以下是两个示例:
a) 在SVG中嵌入iframe
由于无法使用IP或HTTP地址,我购买了域名并在https://yamikaza.com/fake.html托管伪造测试页面。
使用的SVG代码:
|
|
此代码导致伪造页面在attachment.outlook.live.net域内加载,对用户显示为微软官方页面。
b) 在SVG中执行JavaScript(XSS)
|
|
此代码证明可以在attachment.outlook.live.net域上执行JavaScript。虽然该域无法访问outlook.live.com的cookie,但仍能在此子域内运行JavaScript代码。
攻击测试方法
- 保存恶意SVG文件
- 使用Ctrl+C和Ctrl+V将其粘贴到邮件正文
- 发送邮件
- 右键复制图片URL
- 此链接由Outlook自动生成,可直接发送给受害者进行利用
结论
本研究展示了文件上传与内容粘贴之间的差异如何导致安全漏洞。安全研究人员应始终调查异常行为,因为即使是最小的差异也可能引发重大安全问题。