本文章将从漏洞利用分析开始,到样本分析结束,其中涉及到的知识点有PDF格式、TTF字体格式、缓冲区溢出漏洞利用、PE文件格式、软件脱壳和恶意代码分析。其中会演示一些基本操作,方便初学者进行复现。
前置知识
要学习本文章,需要下面的前置知识
- C语言。可以看《C程序设计语言》。
- 汇编语言。可以看《深入理解计算机系统》第三章。
- 缓冲区溢出漏洞利用。可以看《0day安全:软件漏洞分析技术》。
- 软件脱壳、PE文件格式。可以看《加密与解密》。
- 恶意代码分析(可选)。可以看《恶意代码分析实战》。
漏洞信息
漏洞名称: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_sing
set payload windows/exec
set cmd calc.exe
exploit
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 文件的详细定义。
可以使用 010editor 的 pdf 文件模板和 PDFStreamDumper 来解析 PDF 文件
pdf 模板文件从下面地址下载
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字体技术定义字形形状的字体。该字体的详细信息可以从以下地址获得
继续查看 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 解析模板。
使用 010editor 打开导出的 ttf 文件和 ttf 解析模板
ttf 文件全名 The TrueType Font File,是定义字体的文件,其详细的文档如下:
TrueType 字体文件以表格格式包含构成字体的数据。下面是各表的作用
展开 010editor ttf 文件中的表,可以看到有一个 SING 表,该表就是漏洞触发点。但在字体文档里面没有这个表的资料,github 上的开源库中有这个表的定义。
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/34596.html