[原创]CVE-2010-3333漏洞分析及简单的利用-小白的第一次发帖

风暴烈酒 2018-1-9 19:13 844

一.分析环境:

OS 名称:          Microsoft Windows 7 专业版

OS 版本:          6.1.7600 暂缺 Build 7600

虚拟机:           vmware12

调试器:           OD

二.样本文件格式分析:

首先用msf生成我们需要的样本,在选择target的时候选择让程序奔溃的target就行


样本文件简单分析:


rtf文件的基本元素是正文,控制字,控制符号和群组。像上面样本文件截图中有左右大括号括起来并闭合的就是组。组由控制字或者是控制符号组成。\rtf1 为rtf版本,\shp为绘图对象,\sp绘图对象属性定义,\sn pFragments定义属性名称,\sv定义属性值。这里pFragments属性的值已经被填成了畸形数据。


三.漏洞分析

首先打开Word 2007,然后附加到OD,此时发现所有f9,发现所有线程均被挂起,然后恢复线程执行,选择打开文件之后程序挂掉QAQ,然后在点击打开文件的时候再附加,打开样本文件msf.rtf,程序断在了崩溃现场。


此时出现读取 [6EEC422C]异常,栈中esp+0x10处指向的地址为pFragments的首地址,关键寄存器eax = arg_2*8+0x65693820,这里参数2为0x41306164,对应的ascii字符为A0aA,我们在样本中搜索该字符串,但是并没有搜到字符串A0aA。栈回溯到上级,发现参数2由上级函数的第一个参数传递过来


继续向上回溯,分析参数传递过程。到这里可以看到参数1来源于局部变量local.4,向上分析这段代码,发现对local.4进行操作的函数只有地址0x657f95a1这个地址处的函数了,local.4的地址是这个函数的第二个参数。



到此定位到了关键函数call [eax+0x1c],我们在这里直接下断,然后重新加载程序,f9,之后成功断到这里,跟进去进行分析。


注意到这里将rtf中的ascii流转换成了字节码,memcpy之后在观察堆栈,发现在这里堆栈已经被破坏,到这里我们可以确定存在栈溢出漏洞了。由于local.4据返回地址的地址偏移量为0x14,所以我们只要在正常的pFragment数据超过0x14个字节,就可以控制返回地址了。

四.漏洞利用

这里我们利用seh来劫持eip来完成shellcode的执行,在触发异常之后,我们观察下程序进入seh处理函数中的栈帧结构:

   

在这里我们使异常处理函数指向pop reg,pop reg,ret指令序列,就可以回到使eip回到栈中,同时在next域上布置短跳指令,向下跳转6个字节就可以越过保存seh处理函数的地址,从而到达我们的shellcode区域。

通过mona我们可以定位到覆盖seh的偏移(过程略)之后我们附加写好的exp。


双击打开文档即可直接弹窗。


最新回复 (3)
马哲邓论 2018-1-10 11:49
3
支持统大
1
八岛 2018-1-10 12:36
4
统大说好的分享呢
KIDofot 2018-1-11 22:39
5
统大支持。
返回