欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

通过浏览器远程利用Microsoft Office DLL(MS15-132)劫持漏洞

来源:本站整理 作者:佚名 时间:2016-01-15 TAG: 我要投稿

数周之前,安全研究员Parvez Anwar在其个人推特上贴出了大量的微软Office DLL劫持漏洞[1]。几周后,微软公布了MS15-132补丁,修复了相关漏洞,同时处理了被谷歌安全研究[2]以不同形式[3]公布出来的大量类似的bug。
这些已发现的漏洞被证实可以在不同版本的Windows上影响不同版本的Office,即恶意使用Windows可以通过Office文档加载嵌入的OLE对象(在其后,任何以CLSID注册的COM对象)的特点,借助.docx,.rtf以及.pptx文件触发漏洞。
如果你想了解这个漏洞更加详细的信息,可以参考Haifei Li和Bing Sun在今年BlackHat上演讲的那篇很牛的议题“Attacking Interoperability: An OLE Edition”[4]。此外,NCC Group的Dominic Wang也有一篇相关博客“Understanding Microsoft Word OLE Exploit Primitives: Exploiting CVE-2015-1642 Microsoft Office CTaskSymbol Use-After-Free Vulnerability”[5],主要是进一步说明微软Office是如何处理嵌入的ActiveX控件。
下面我们来概述一下这些漏洞是如何产生的。
当加载一个嵌入了OLE对象的文档,其中OLE对象是被CLSID或者ProgID指定,Windows将会在自己的注册表中搜索这些指定的ID,随后尝试加载与之先关的DLL,并调用相关代码创建这个对象请求的实例。
一旦这个DLL被加载到Office的地址空间中,Office会判断这个已加载的对象是否与该文档适配(或者,实际上根本就不是一个OLE对象)。
如果在指定的地址需要的DLL不存在,Windows将会在预先指定的地址处“寻找DLL”[6]。这个包括当前的目录。
在这个0day漏洞中,这些特定的CLSID(嵌入在Office文档中),将会导致这些DLL“elsext.dll, api-ms-win-core-winrt-l1-1-0.dll, OCIW32.DLL or oci.dll”从当前目录加载。如果攻击者在相同的目录下放置上述DLL其中之一,这样嵌入对象的文档也会从这个相同的目录中加载这个DLL,那么攻击者构造的代码将会被Office执行。
现在在已有的知识背景下,讨论一下这个漏洞。传统的DLL劫持漏洞要求用户从SMB或者WebDAV这类网络共享中来启动恶意文件。这是由于从远程共享中启动文件时,在文件启动时当前目录下的文档将会成为共享。攻击者很明显可以控制这个,因此可以轻易地在和文档相同的目录下植入恶意的DLL。本文我们所讨论的是攻击者如何在不需要借助SMB或者WebDAV的情况下,使用相关技巧在Office和Firefox中实现远程利用这些漏洞。
Office临时文件释放
为了能够远程利用该漏洞,我们采用了一些已有的解决问题的方法。第一个方法就是利用微软Office会释放临时文件的问题。这些问题已经被潜在利用,Haifei Li也发现了这个问题。该技巧非常好用,攻击者可以通过ActiveX控件包含很容易的把自己的payload嵌入到RTF文件中,而当这个RTF文件被打开时,攻击者的payload将会释放至用户的%TEMP%文件夹下,并保留其原始的名字(除非在%TEMP%文件夹下存在同名文件,这种情况下,文件的后缀将会追加一个数字,例如(2).)。
在我们的漏洞利用中,同样会借助微软的这个问题来嵌入我们的payload,oci.dll。这个很容易实现,只需将恶意的DLL植入漏洞文档,并将其保存为.rtf形式,然后重新打开这个文档,在当前用户的%TEMP%目录下就可以看到oci.dll文件已经被写进去了。
Firefox临时文件夹
第二个好用的技巧,当我们在Firefox的下载对话框中选择“open with”时,Mozilla Firefox会使用当前用户的%TEMP%目录作为其默认的下载目录。
当用户使用Firefox下载一个文件时,可以有两种选择(如下所示):“save as”和“open with”。

当选“open with”时,在使用指定的程序打开文件前,Firefox将文件下载至用户的%TEMP%目录下。此时,启动程序的当前工作目录变成了用户的%TEMP%目录,看下现在这些文件的位置。

我们可以利用浏览器的这个特性,构造一个包含嵌入的“package”ActiveX控件和一个存在漏洞的对象的RTF文件,其中“package”控件在前,漏洞对象在后。当用户通过Firefox浏览器(选择“open with”(Microsoft Word)选项)从攻击者的web服务器上下载该RTF文件时,有两件事将会发生:
首先,oci.dll将会释放至用户的%TEMP%文件夹下。
其次,这个存在漏洞的对象被加载,导致Word尝试从当前目录加载oci.dll文件。
由于现在的当前目录是%TEMP%,攻击者的payload就会通过Word被执行起来。

Demo
下面的demo视频显示如何借助上述方法通过Firefox实现远程代码执行。
微软Edge和谷歌Chrome
微软的Edge和谷歌的Chrome都是利用用户的“Downloads”目录来存储下载文件,并且在下载前不会提示。这个特点也有可能被攻击者利用,使用“auto-download”的攻击方法;除了构造的文档,攻击者还可以强制用户的浏览器下载攻击者提供的DLL。当打开这个文档时,DLL将会从“Downloads”目录被加载(DLL是使用“auto-download”方法下载到该目录下的)。
下面的例子将会显示是怎样通过方法强制下载DLL文件的。
var iframe = document.createElement('iframe');
iframe.src = 'oci.dll';
iframe.id = "dllframe";
iframe.width = 0;iframe.height = 0;

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载