CVE-2010-2883 从漏洞分析到样本分析

本文章将从漏洞利用分析开始,到样本分析结束,其中涉及到的知识点有PDF格式、TTF字体格式、缓冲区溢出漏洞利用、PE文件格式、软件脱壳和恶意代码分析。其中会演示一些基本操作,方便初学者进行复现。

前置知识

要学习本文章,需要下面的前置知识

  1. C语言。可以看《C程序设计语言》。
  2. 汇编语言。可以看《深入理解计算机系统》第三章。
  3. 缓冲区溢出漏洞利用。可以看《0day安全:软件漏洞分析技术》。
  4. 软件脱壳、PE文件格式。可以看《加密与解密》。
  5. 恶意代码分析(可选)。可以看《恶意代码分析实战》。

漏洞信息

漏洞名称:Adobe Reader TTF 字体 SING 表栈溢出漏洞

漏洞编号:CVE-2010-2883

漏洞类型:缓冲区溢出

漏洞描述:Adobe Reader 是流行的PDF阅读软件。CVE-2010-2883  Adobe Reader TTF 字体 SING 表栈溢出漏洞的成因是Adobe Reader和 Acrobat 9.3.4中的 CoolType.dll 在解析 PDF 中的字体时未检查数据的长度,导致缓冲区溢出。

分析环境

操作系统:Windows XP SP3

漏洞软件:Adobe Reader 9.3.4

调试工具:吾爱破解OllyDbg

反汇编器:IDA 7.5

样本 md5 

名企面试自助手册.pdf: 3f41dc8e22deca8302db1207e5cdc11c

svrhost.exe: 56e6d9b07c8e9e71224c0741566c3eac

msxml0r.dll: dd48f45c9418da8eb89dfcae894d5b93

本次实验的所有资料可以在公众号回复 CVE-2010-2883 获取 

漏洞复现

本次分析中的样本主要使用漏洞战争里面提供的 名企面试自助手册.pdf, 该 pdf 文件在漏洞利用成功后,会修改系统文件,释放恶意程序,然后再打开一个正常的面试手册 pdf 文件,让用户感觉就是打开了一个正常的 pdf 文件,它是一个完整的利用链。为了获取明显的漏洞效果,可以使用 msf 生成漏洞利用的pdf 文件,打开pdf文件会弹一个计算器或者反弹一个shell 。

在 kali linux 虚拟机终端中输入下面命令启动 msf

msfconsole

输入下面命令搜索 CVE-2010-2883 漏洞利用模块

search CVE-2010-2883
图片

使用下面命令生成 pdf 漏洞利用文件

use exploit/windows/fileformat/adobe_cooltype_singset payload windows/execset cmd calc.exeexploit
图片

pdf文件生成在 /root/.msf4/local/msf.pdf ,在另一个终端输入下面命令复制到 /root/ 目录,从 kali 虚拟机复制出来,然后复制进 windows xp 虚拟机

cp /root/.msf4/local/msf.pdf /root/
图片

安装 Adobe Reader 9.3.4

图片

安装完后,双击 pdf 文件,会弹出计算器

图片

漏洞分析

PDF 格式和 TTF SING 表

在分析漏洞前,先了解下 pdf 文件的格式和其中的 ttf sing 表的格式。

PDF 全称为 (Portable Document Format) 可移植的文档格式,可以在下面地址获取 PDF 文件的详细定义。

https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf

可以使用 010editor 的 pdf 文件模板和 PDFStreamDumper 来解析 PDF 文件

pdf 模板文件从下面地址下载

https://www.sweetscape.com/010editor/repository/files/PDF.bt

PDFStreamDumper从下面地址下载

http://sandsprite.com/CodeStuff/PDFStreamDumper_Setup.exe

PDF的文件结构如下图

图片

PDF文件结构上主要有四部分组成:

  • Header:文件头部,用来注明 PDF 文件的版本号,其值为 %PDF-版本号,如 %PDF-1.5
  • Body:  主体,主要由组成文件的对象组成,如图片、文字等。
  • Cross-reference table: 交叉引用表,用于存放所有对象的位置偏移,可以方便地随机访问 PDF 中的任意对象。
  • Trailer: 文件尾,给出了交叉引用表的位置和一些关键对象的信息,以%%EOF结尾。

可以用 010 Editor 解析 PDF 文件的格式。把样本 PDF 文件拖到 010 editor 中,在 View -> Edit As -> Hex ,使用十六进制视图查看文档。

图片

在 Templates 处打开下载的 PDF.bt 模板文件

图片
图片

点击 Run Template 运行模板文件

图片

点击下面解析结果的相应部分,可以在编辑视图处高亮该部分,可以看到样本的 Header 中版本号是 1.5

图片

中间是 PDF 的 body 部分

图片

接下来是交叉引用表

图片

最后是尾部

图片

PDF的 Body 可以看成一个树状的层次结构组成,其中的每个节点都是一个对象。由根节点 Document catalog 开始,其页节点包括文档的内容(页树)、大纲、文章线索、等其他属性

图片

以 Page tree 为例,其下面的页节点是 Page 节点,也就是每一个页面,Page 节点又由内容流、缩略图、注解等元素组成。

可以使用 PdfStreamDumper.exe 来解析和导出 PDF 文件中的对象。在菜单 Load -> Pdf File 中加载样本文件。

点击第一个对象,/Type 指定了该对象的类型是 Catalog,也就是根对象。

/Pages 指向一个对象 2 0 R , 2是对象的序号,0是生成号,R代表引用一个对象,该对象其实是一个 Pages 对象。/OpenAction 指向了 11 0 R 对象,该 对象指定了打开文档时要进行的操作。

图片

接下来看看 2 0 R 对象,也就是序号为 2 的对象。其中 /Resources 指向一个资源对象 4 0 R。 /Kids 是它的叶节点 5 0 R,其实就是一个 page 节点。/Type 指定该对象是 Pages 对象。

图片

我们重点看看 /Resources 指向的一个资源对象 4 0 R,它是漏洞触发的对象。其对象序号为 4,其中 /Font条目指向了一个字体字典对象 6 0 R 。

图片

继续查看序号为 6 的对象。/F1代表了使用Type 1字体技术定义字形形状的字体。该字体的详细信息可以从以下地址获得

https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/minuxs/TrueType%201.0%20Font%20Files.pdf
图片

继续查看 7 0 R,其中的 /FontDescriptor 指向了一个字体描述器 9 0 R,用于描述字体各种属性。

图片

继续查看 9 0 R ,该对象中的 /FontFile2 指向一个流对象 10 0 R,该对象就是触发漏洞的字体对象。

图片

其中的 00 01 00 00 是 ttf 字体文件的开始标志。

图片

在 PDFStreamDumper 中右键选择 Save Decompressed Stream, 把该 TTF 内容存在到 txt 文件中。

图片
图片

接着下载 TTF 文件的 010editor 解析模板。

https://www.sweetscape.com/010editor/repository/files/TTF.bt

使用 010editor 打开导出的 ttf 文件和 ttf 解析模板

图片

ttf 文件全名 The TrueType Font File,是定义字体的文件,其详细的文档如下:

https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/minuxs/TrueType%201.0%20Font%20Files.pdf

TrueType 字体文件以表格格式包含构成字体的数据。下面是各表的作用

图片

展开 010editor ttf 文件中的表,可以看到有一个 SING 表,该表就是漏洞触发点。但在字体文档里面没有这个表的资料,github 上的开源库中有这个表的定义。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/34596.html

联系我们
联系我们
分享本页
返回顶部