-
-
[原创]CVE-2010-3333 简单的栈溢出漏洞复现(适合新手)
-
发表于: 2018-11-29 21:39 6309
-
CVE-2010-3333(简单的漏洞利用)
虚拟机环境:Windows XP SP3
调试器:Immunity Debugger ,OD
反汇编器:IDA Pro
漏洞软件:Microsoft Office Word 2003 (MSDN I tell you 有相关资源下载)
一、相关介绍
RTF文件格式
RTF(Rich Text Format)格式是Microsoft公司为进行文本和图像信息格式的交换而制定的文件格式,它适用于不同的设备、操作环境和操作系统。RTF文件的基本元素是正文(TEXT)、控制字(Control Word)、控制符号(Control Symbol)和群组(Group)
(1)控制字是RTF用来标记打印控制符和管理文档信息的一种特殊格式的命令,RTF用它作为正文格式的控制代码,每个控制字均以一个反斜杠\开头,由a~z小写字母组成,通常应该不包含任何大写字母,而分隔符标志着控制字名称的结束。它的使用格式为:\字母序列<分隔符>
(2)控制符号由反斜杠后跟一个单独的、非字母的字符,表示一个特定的符号
(3)群组由包含在大括号中的文本、控制字或控制符组成。左括符’{‘表示组的开始,右括符'}'表示组的结束。每个组包括文本和文本的不同属性。RTF文件也能同时包括字体、格式、屏幕颜色、图形、脚注、注释(注解)、文件头和文件尾、摘要信息、域和书签的组合,以及文档、区段、段落和字符的格式属性
下图摘自样本
\rtf1 —— RTF版本
\shp —— 绘图对象
\sp —— 绘图对象属性定义
\sn pFragments —— 定义属性名称,pFragments段是图形的附加部分,属于数组结构。它允许图形包含多个路径和分段,该属性列出图形各个碎片
\sv —— 定义属性值
摘自《漏洞战争》
二、样本分析(样本使用msf生成,附至文末)
1.关闭OD的忽略异常,附加word2003,加载样本文件
2.产生异常,查看0x130000地址属性(异常原因该地址不具备写入属性)
3.异常点(30E9EB88)下断,重新加载运行
4.此时查看拷贝的目标地址,发现是一个栈地址,并且距离函数返回地址仅0x14字节
5.追踪返回地址便可知由下图函数调用产生溢出
6.查看IDA
7.溢出原理:由于拷贝字节数写在rtf文件中,可由我们自行修改(即未对拷贝字节数做任何限制),从而可以覆盖栈内重要指针完成漏洞利用
三、漏洞利用
1.现在由我们自行构造poc文件,打开immunitydbg,附加word200,查找jmp esp指令
2.选择jmp esp 跳板指令地址 0x7344745d
3.追踪返回地址,跟入返回函数,发现函数返回retn 0x14
4.则我们的poc文件结构如下图
5.在构造文件时我们发现存储的是数据的ascii的形式,例如我们的拷贝字节数0xc8ac,
对应的存储数据为 61(a) 63(c) 63(c) 38(8),即原先2字节数据拆分成4字节ascii存储
注:shellcode以字符串存储时字母请小写
6.将生成的数据二进制粘贴至目标poc处
7.保存运行
漏洞利用成功!