CVE-2010-2883:基于样本分析 PDF SING表字符溢出漏洞
0x01 前言
- CVE-2010-2883 漏洞的成因是由于 CoolType.dll 这个动态链接库在解析 SING 表中的 uniqueName 这个项时没有对长度进行限制,导致使用 strcat 函数拼接字符串时造成了溢出
- 分析工具:OD、Immunity Debutter(基于 OD 的漏洞调试工具)、PdfStreamDumper(PDF文档分析工具)
- 环境:Windows 7 家庭版(虚拟机)、开启了 ASLR 和 DEP 保护
- 样本:触发漏洞的 PDF 文件(提取码:95h4,请在虚拟机中测试),Adobe Reader 9.3.4(提取码:yc76)
0x02 基于样本的调试分析
- 使用 PdfStreamDumper 载入 PDF 样本


- 根据官方文档,入口地址 0x11c 为 SING 表的真实数据

- 之后在偏移 0x10 即是 uniqueName 的数据,uniqueName 为 28 位,对齐后为 4 个字节

- 先断一下 CoolType.dll 中的断点

- 右击->中文搜索引擎->智能搜索->搜索SING字符串,搜索结果有好多,需要一个一个筛选

- 找到漏洞触发的地方,按 F2 键下断

- PDF 阅读器载入 OD

- 运行程序,打开有漏洞的样本,期间可能会弹出程序崩溃对话框,关闭即可

- 在漏洞出断下,可以看到标志性的 strcat 函数

- 执行到如下位置

- 将堆栈在数据窗口中跟随


- 对紫色覆盖的区域,也就是样本中的数据下内存访问断点(经过多次测试的结果),什么是内存访问断点,就是读取有内存访问断点的内存的时候就对断下来,有助于看出什么时候程序在读取样本

- F9 执行,经过多次执行,发现断在了 retn 这个地方(因为 retn 太特殊了)

- 观察此时堆栈窗口,发现返回值为 4A82a714

- 单步 F8,此时已经到达 icucnv36.dll 的动态链接库中,这个 pop esp 是跳到 shellcode 的关键一步

- 此时的堆栈窗口

- 单步 F8

- 此时 ESP 为 0x0c0c0c0c,点睛之笔

- 堆栈成功变为 shellcode(是不是很神奇,以后制作 ROP 链的时候又多了一种方法)

0x03 逻辑图

0x04 样本是如何绕过系统对缓冲区的防御
- 堆栈 cookie 我没有研究过,所以不清楚样本文件是如何绕过的
- 针对 ASLR 样本绕过的方式是使用未被 ASLR 的动态链接库 icucnv36.dll 这个动态链接库,使用 Immunity Debugger 载入这个动态链接库

- F9 运行两次,之后在命令行输入 !mona modules 查询一下,发现这个动态链接库果然没有受到 ASLR 的保护(Immunity Debutter 运行 !mona modules 命令时需要用到 mona.py 脚本,提取码:6ehp,将脚本复制到 Immunity Debutter 目录下的 PyCommands 文件夹即可)

- 那么样本文件是如何绕过 DEP 防护的呢,原来是使用了 PDF 中可以执行 JavaScript 的特性,利用堆喷射(Heap Spray)来绕过 DEP 的防护(这时 shellcode 执行的区域并不在 DEP 的保护之下),这个 JavaScript 代码变量都经过了模糊处理,增强了伪装性,以下就是利用 JavaScript 代码的堆喷射

0x05 总结
- 一般缓冲区的栈溢出会溢出到函数的返回点,通过返回点来构造绕过防御机制的代码,最后跳到 shellcode 上执行来完成攻击;但是这个漏洞是非常特殊的,在溢出之后一直填充并覆盖了函数的返回值,程序并没有按照规定流程一直执行到函数的返回点(之前就会中断并退出),目前并不知道是什么原因,只能使用内存访问断点的方法来追踪函数到底在堆栈变为什么状态之后才会返回,跟踪之后终于发现了在堆栈变为样本数据中的 0x4a82a714 的时候函数才会返回,这样就了解了样本的执行步骤
0x06 参考资料
- 漏洞战争:软件漏洞分析精要
- 0day安全:软件漏洞分析技术
CVE-2010-2883:基于样本分析 PDF SING表字符溢出漏洞的更多相关文章
- idapython在样本分析中的使用-字符解密
最近接手的一个样本,样本中使用了大量的xor加密,由于本身样本不全,无法运行(好吧我最稀饭的动态调试没了,样本很有意思,以后有时间做票大的分析),这个时候就只好拜托idapython大法了(当然用id ...
- MS Office CVE-2015-1641 恶意 Exploit 样本分析
MS Office CVE-2015-1641 恶意 Exploit 样本分析 在对最近的一个恶意 MS Office 文档样本进行分析时,我们发现了一些有趣的特性.这个文档利用 CVE-2015-1 ...
- 【计算机视觉】基于样本一致性的背景减除运动目标检测算法(SACON)
SACON(SAmple CONsensus)算法是基于样本一致性的运动目标检测算法.该算法通过对每个像素进行样本一致性判断来判定像素是否为背景. 算法框架图 由上图可知,该算法主要分为四个主要部分, ...
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...
- [SharePoint 2010]关于基于声明(Claims)的用户认证模式
转:http://blog.csdn.net/zw_2011/article/details/7417132 SharePoint 2010在用户认证模式上,较之以前的版本有了非常大的改变.在Shar ...
- Hibernate一级缓存(基于查询分析)
首先我们应该弄清什么是hibernate缓存:hibernate缓存是指为了降低应用程序对物理数据源的访问频次,从而提高应用程序的运行性能的一种策略.我们要将这个跟计算机内存或者cpu的缓存区分开. ...
- ocky勒索软件恶意样本分析1
locky勒索软件恶意样本分析1 1 locky勒索软件构成概述 前些时期爆发的Locky勒索软件病毒这边也拿到了一个样本,简要做如下分析.样本主要包含三个程序: A xx.js文件:Jscript脚 ...
- ocky勒索软件恶意样本分析2
locky勒索软件恶意样本分析2 阿尔法实验室陈峰峰.胡进 前言 随着安全知识的普及,公民安全意识普遍提高了,恶意代码传播已经不局限于exe程序了,Locky敲诈者病毒就是其中之一,Locky敲诈者使 ...
- Mac下门罗币矿工样本分析
背景 今天遇到一个JSONRPC的告警,怀疑挖矿木马,IOC是132.148.245.101,无其他信息,随即google一波. 查询网络 遇到了,主动下载样本分析,下载地址:http://rjj.q ...
随机推荐
- 1.1 Python3基础-前言
>>返回主目录 Python 交互式代码 Python 脚本式代码 第一段Python代码: print('Hello World!') >>返回主目录
- Tomcat后台爆破指南
0x00 实验环境 攻击机:Win 10 0x01 爆破指南 针对某Tomcat默认管理页面: (1)这里主要是介绍一种比较好用的burp爆破方法: 点击Tomcat后台管理链接 Tomc ...
- Linux less命令查看文件常用查询方法
g 跳到文件开头 G 跳到文件结尾 / 往下搜索字符 ? 网上搜索字符 n 执行上一个搜索(/或者?的搜索),例如上一个搜索是使用/搜索的,则继续使用/搜索,即往下搜索结果 N 反向执行上一个搜索(/ ...
- 剪切DOM节点中断transition执行【问题】
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- visualvm工具远程对linux服务器上的JVM虚拟机进行监控与调优
文/朱季谦 最近在做了一些JVM监控与调优的事情,算是第一次实践,还比较陌生,故而先把这一次经验简单记下笔记,这样,对后面学习调优方面时,不至于又想不起来了.本文档主要总结在window本地环境远程对 ...
- Python爬虫系列之爬取美团美食板块商家数据(一)
主要思路 目的: 根据输入的城市名,爬取该城市美团美食板块所有商家的数据.数据包括: 店名.评分.评论数量.均价.地址, 并将这些数据存入Excel中. 最后尝试对爬取到的数据做一个简单的分析. 克服 ...
- 基于k8s的集群稳定架构-转载
基于k8s的集群稳定架构-转载 前言 我司的集群时刻处于崩溃的边缘,通过近三个月的掌握,发现我司的集群不稳定的原因有以下几点: 1.发版流程不稳定 2.缺少监控平台[最重要的原因] 3.缺少日志系统 ...
- [Fundamental of Power Electronics]-PART I-2.稳态变换器原理分析-2.4 Cuk变换器实例
2.4 Cuk 变换器 作为第二个示例,考虑图2.20(a)的变换器.该变换器执行类似于降压-升压变换器的直流转换功能:它可以增加或减小直流电压的幅值,并且可以反转极性.使用晶体管和二极管的实际实现如 ...
- java面试-CAS底层原理
一.CAS是什么? 比较并交换,它是一条CPU并发原语. CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什 ...
- 【设计模式】- 生成器模式(Builder)
生成器模式 建造者模式.Builder 生成器模式 也叫建造者模式,可以理解成可以分步骤创建一个复杂的对象.在该模式中允许你使用相同的创建代码生成不同类型和形式的对象. 生成器的结构模式 生成器(Bu ...