hu1y40's blog

hu1y40'blog
天堂的穹空遍布地狱之火的颜色,但也是天堂。
  1. 首页
  2. 书籍阅读
  3. 正文

CVE-2012-0774 Adobe Reader TrueType字体整数溢出漏洞

2023年10月7日 1342点热度 0人点赞 0条评论

实验环境

推荐使用的环境 备注
操作系统 Windows 7
虚拟机 Vmware
调试器 Windbg
反汇编器 IDA Pro
漏洞软件 Adobe Read 9.5.0

漏洞描述

Adobe Reader 和 9.5.1 之前的 Acrobat 9.x 以及 10.1.3 之前的 10.x 中的整数溢出允许攻击者通过精心设计的 TrueType 字体执行任意代码。

fig:

PDF文件格式和常用分析工具

Didier Steven的PDF-tools

python2 make-pdf-javascript.py test.py

上述命令生成一个会弹窗的pdf文件。

fig:

notepad++打开该文件。

%PDF-1.1 # PDF文件头,符合PDF1.1规范

1 0 obj #Object对象,1为Object的索引Index,0为Object的版本号Version
<< # Object数据开始标记
/Type /Catalog # 字典元素 /Type代表键名 /Catalog代表键值 本对象为Catalog目录类型
/Outlines 2 0 R # Outlines(大纲)对象代表PDF文件的书签树,它间接引用Object 2
/Pages 3 0 R # Pages(页面组)对象包含文件的页面数,它间接引用Object 3
/OpenAction 7 0 R # 打开文档后自动执行的动作,这里执行Javascript代码,间接引用Object 7
>> # Object数据结束标记
endobj #Object结束关键字

2 0 obj
<<
/Type /Outlines # 对象类型为Outlines
/Count 0 # 书签计数为0
>>
endobj

3 0 obj
<<
/Type /Pages # 对象类型为Pages
/Kids [4 0 R] # 代表PDF第一页引用对象4
/Count 1 # 页数
>>
endobj

4 0 obj
<<
/Type /Page
/Parent 3 0 R # 父对象为Object 3
/MediaBox [0 0 612 792] # 页面的显示大小(以像素为单位)
/Contents 5 0 R # 页面内容为对象5
/Resources << # 该页包含的资源
/ProcSet [/PDF /Text] # PDF包含文本内容
/Font << /F1 6 0 R >> # 字体类型为F1,引用对象6
>>
>>
endobj

5 0 obj
<< /Length 56 >> # 页面内容长度为56
stream # 流对象的开始标记
BT #文字对象的开始标记# /F1 12 Tf 100 700 Td 15 TL (JavaScript example) Tj ET #文字对象的开始标记#
endstream # 流对象的结束标记
endobj

6 0 obj
<<
/Type /Font # 字体对象类型
/Subtype /Type1
/Name /F1
/BaseFont /Helvetica
/Encoding /MacRomanEncoding
>>
endobj

7 0 obj
<<
/Type /Action # 动作对象
/S /JavaScript # 内嵌Javascript脚本
/JS (app.alert({cMsg: 'Hello from PDF JavaScript', cTitle: 'Testing PDF JavaScript', nIcon: 3});) # 执行aler弹窗,内容为cMsg中的内容
>>
endobj

xref # 交叉引用表
0 8 # 对象号从0开始,共有8个对象
0000000000 65535 f # 对象1 生成号65535代表对象重复用,f代表自由对象
0000000010 00000 n # 对象2 10代表偏移量,0代表该对象违背修改过,n代表对象正在使用
0000000098 00000 n
0000000147 00000 n
0000000208 00000 n
0000000400 00000 n
0000000507 00000 n
0000000621 00000 n
trailer # 文件尾对象
<<
/Size 8 # 对象数目
/Root 1 0 R # 根对象为Object 1
>>
startxref # 交叉引用表在文件流偏移773处
773
%%EOF # 文件结束标志

010editor查看该文件。

fig:

PDFStreamDumper打开该文件。

fig:

静态分析

书中提及的TrueType Font Analyzer可以追溯到这个网页http://jikasei.me/font/rounded-mplus/memo.html,但是没看到下载链接。

使用010editor打开ttf文件会出现如图警告。

fig:

点击警告会跳转到结构体tcmp_format4中。

fig:

搜索tcmap_format4会跳转到tcmap结构体中。

fig:

由于第二个record的length是64,(length-(FTell()-cmap_subtable))/2 == 0

fig:

glyf主要用于保存操作堆栈的虚拟指令,即图元指令。TrueType图元指令是一个伪计算机字节指令,类似于Java的虚拟机指令。TTF中的glyf表主要用于存放图元轮廓定义以及网格调整指令,其位置索引是一张单独的表,而图元数据表主要记录图元的索引号Index(这段话还是挺难理解的,建议直接去看文档)。

使用windbg附加进程打开poc,发现中断处。coolType+0x7a1c

fig:

IDA反编译dll,查看伪代码如下。

fig:

OD设下条件断点打印虚拟指令索引号。

fig:

fig:

fig:

触发虚拟指令索引号为0x26为MINDEX处理函数。

动态调试。i=0x40000001,i*4整数溢出,所以导致i控制换导致超出了v4的空间。

fig:

更多的分析是ttf虚拟指令的分析,这里不多做了。

补丁分析

这里的补丁无法分析,由于漏洞函数和修复后的函数在bindiff中无法匹配。

标签: 漏洞
最后更新:2023年10月7日

hu1y40

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • 实验环境
  • 漏洞描述
  • PDF文件格式和常用分析工具
  • 静态分析
  • 补丁分析

分类目录

  • 0day安全
  • Bypass
  • C++Prime
  • CTF
  • DoS
  • DoS
  • FUZZ
  • iot
  • JSONP
  • MISC
  • MISC
  • PHP伪协议
  • Python
  • REVERSE
  • sqli-labs
  • SQL注入
  • Trick
  • UAF
  • WEB
  • WEB
  • XXE
  • 书籍阅读
  • 二进制
  • 代码阅读
  • 信息搜集
  • 信息泄露
  • 加密与解密
  • 双重释放漏洞
  • 反序列化
  • 命令执行
  • 命令执行
  • 堆溢出
  • 密码学
  • 弱加密
  • 提权漏洞
  • 整数溢出
  • 文件上传
  • 未分类
  • 栈溢出
  • 格式化字符串漏洞
  • 模型
  • 汇编语言
  • 渗透测试
  • 漏洞分析
  • 漏洞利用
  • 漏洞战争
  • 漏洞挖掘
  • 病毒分析
  • 越界读取
  • 路径遍历
  • 逻辑漏洞
  • 配置不当
  • 钓鱼
  • 靶场
最新 热点 随机
最新 热点 随机
加密算法 2023年度总结 RTSPServer StackOverflow Vulnerability FUZZ 总览篇 MP4Box 无限循环漏洞 CVE-2023-40477 Winrar RCE漏洞分析
PE结构解析 C++ Prime CVE-2021-35515 Apache Commons Compress拒绝服务漏洞 0day安全 第1-9章总结 bugku Linux 钓鱼手法

COPYRIGHT © 2023 hu1y40's blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鄂ICP备2021009673号-1