首页
社区
课程
招聘
[原创]对Cve-2011-0978稳定利用的分析
2012-2-1 20:40 6758

[原创]对Cve-2011-0978稳定利用的分析

2012-2-1 20:40
6758
在微软发布的ms11-021中,包含了两个CVE编号- Cve-2011-0104、Cve-2011-0978。网上常见对Cve-2011-0104的分析(http://sebug.net/vuldb/ssvid-23168),demo文件也能够比较容易地找到。但是, office 2007环境下却会自动修补数据,使得Cve-2011-0104不能触发。于是,找来Cve-2011-0978分析一番。
        在office 2003环境下,需要用户打开第二个sheet才会触发漏洞,而在office 2007环境下自动就触发漏洞了。Instruder曾经写过一个分析的帖子(http://bbs.pediy.com/showthread.php?t=138428),看完之后应该对漏洞原因比较清楚了。要利用这个漏洞,修补ebx的值,使其不产生访问异常,然后函数流程将调用memmove。调用的结果有两种:
1、        覆盖函数返回地址。
2、        覆盖she链。
按照Instruder的说法,可能覆盖函数返回链成功的可能性比较大。

在文章中,作者在表格中填入”jjjjjjjjj”字符,载入excel后,excel已经把这些字符转换为unicode了,所以在文章的结尾,作者提出需要找到xx00xx00形式的跳转地址,来实现对溢出的利用。但是,我通过分析后觉得可以有以下改进:
直接对excel文件中的biffRecord记录进行填充,那么excel加载后对这部分填充数据不会做unicode编码,也就是说可以通过对文件字节的填充实现一个稳定的内存字节填充。这样就不存在不好找跳转地址的问题。(附件poc1中填A及填B部分)。
异常时内存有如下状态:

这里可以看到eax指向一个指针数组,数组中的地址指向一个unicode的字符串。

进过实验后发现eax指向的unicode字符串保存在文件的0xDC7处,经过研究后发现0xDC7处保存的是一个XLUnicodeRichExtendedstring结构。
进过对该结构的分析(微软给出的xls格式说明)。可以通过修改该结构的flag标记,使得加载后eax指向的值不被转换为unicode。另外,通过对cch字段的修改可以扩大指针数组元素指向的数据块的大小。(附件poc2中填D部分)
假设ebx能够被修改为0x00(文件0x39E7处),那么
mov     eax,dword ptr [eax+ebx*4]
后eax指向的内存将能够被控制。但是经过对文件的调试分析后,发现这中利用的思路根本行不通。因为拷贝目的缓冲区的大小将根据cch的大小来分配。因此不可能实现对栈中邻近缓冲区的覆盖。

那么只有找到poc文件中某个定偏移地址,该偏移处的数据加载到内存后与eax指向数组有某种固定关系,这样才能够实现稳定利用了。
但是由于eax本身是在程序执行中动态分配地址,因此要找到这样一个固定偏移比较困难。

于是,对该漏洞的稳定利用陷入了僵局。套用instrude的一句话:

Ps :暂时并没有找到合适的地址,没有成功利用… 接下来就看你的了

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞5
打赏
分享
最新回复 (9)
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
cmdhz 3 2012-2-1 20:44
2
0
欢迎大家参与分析讨论
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
instruder 4 2012-2-2 11:38
3
0
图咋没了

能让字符不转换成unicode 不错哈

雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
cmdhz 3 2012-2-2 12:30
4
0
图不知道怎么回事,不过原文可以看附件中的doc
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blackwhite 1 2012-2-2 23:54
5
0
呵呵.开个玩笑.
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blackwhite 1 2012-2-2 23:56
6
0
你把索引改成00H这还叫利用漏洞吗?浪费我不少时间研究你的贴子...奶奶的.
雪    币: 345
活跃值: (122)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
cmdhz 3 2012-2-3 08:56
7
0
楼上对我了解很深啊。我好像是过年没事详细看了一下这个东西。经你这么一说,原来我两年前就研究webDEViL牛放的东西了。

ebx的值取自文件偏移 0x39E7处,在poc文件中被修改为0xAAAA。这个值位于一个Biffgeneral记录中,作为数据存在,肯定是可以改为00(扩展后变成0xFFFF0000)或者其他值的。调试的时候,就以这个作为例子,试了一下。
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
instruder 4 2012-2-3 16:41
8
0
movsx只能扩展>=0x8000的哦 0 movsx后 还是0

blackwhite 是巨牛...膜拜
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blackwhite 1 2012-2-3 23:06
9
0
楼上的兄弟留个QQ,正找你有点事哩.
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
blackwhite 1 2012-2-3 23:16
10
0
其实这个洞的成因和构造我也没认真看,不过感觉因该能比较稳定的利用.楼上兄弟说的跳转的问题我想
至少可以简中下利用吧.
游客
登录 | 注册 方可回帖
返回