首页
社区
课程
招聘
[原创]cve-2017-11826简单分析
发表于: 2018-5-14 01:49 9885

[原创]cve-2017-11826简单分析

2018-5-14 01:49
9885

0 简介

 软件名称:Microsoft Word

 影响范围:2007-2016

 影响平台:Windows

 漏洞模块:wwlib.dll

 分析环境:win7+office2010

 样本:b2ae500b7376044ae92976d9e4b65af8


1 样本静态分析

拿到样本以后,先不着急去动态加载去分析,我们先分析一下样本,看看能不能获取到一些有用的信息。

用oletools中的rtfobj.py 解析一下样本,


有三个对象,第一个没有名字,第二第三个看起来是同一类型的,而且还知道了他们在文件中的位置。通过命令rtfobj.py -s all 将他们分离出来,逐个看一下


1.1 Object 0


id为0 的对象看不出什么东西来,我们还是去样本文件中它所在的位置去看一下


很明显能看到一个clsid,关于clsid我们简单说一下,

因为有很多组件是会被多个程序使用的,而这些组件在不同计算机中存储的位置也是不一样的,为了解决这个问题,微软便提出了用CLSID这么一个16字节的数来表示。在注册表HKCR\CLSID\{......}主键下,便存储着CLSID,每个CLSID下的LocalServer32(DLL组件使用InprocServer32) 中保存着程序路径名称。CLSID 的结构定义如下:

去注册表里面找一下D5DE8D20-5BB8-11D1-A1E3-00A0C90F2731这个值,很尴尬,没有找到。在win7和win10里面都没有这个值,最后在xp上找到了。



这里调用这个msvbvm60.dll是干嘛用的呢?通过这篇文章我们知道,原来通过未开启aslr的模块来绕过aslr。那么问题来了,在xp上默认是不开启aslr的,所以有和没有没有太大的区别;在win7和win10上虽然默认开启,但是注册表中没有这个值,岂不是就没有作用了么(事实也证明了这一点,当我打开样本时,用火绒剑观察winword.exe时并没有发现有加载这个dll)。那么为什么不用一个更加通用化的dll呢?


1.2 Object 2

第二个跟第三个对象看起来是一个类型的,都是word对象。我们把他们解压来看一看


通过[Content_Types].xml可以看出,样本中插入了40个activeX对象:

我们去Package~\word\activeX目录中看一下插入的对象是什么,在该目录下有一个bin文件和40个xml文件,这四十个xml文件都是一样的:

在Package~\word\activeX\_rels目录下可以看到这些xml文件的对应规则,40个rels文件中的内容也都是一样的

是将这些xm文件都指向activeX1.bin文件中,那么主要内容就是这个activeX1.bin文件了,我们看一下这个bin文件,发现里面有一块块重复的数据,大致是(A+B+C),其中

每块大小0x1000,共有512块,这就很明显了,是用于堆喷的,C是shellcode部分。我们记下这里的几个地址72980b2e  729440cb 729440cb  088883ec,看后面能不能遇到。关于shellcode部分,可以用在线网站查看反汇编代码和流程。

再看一看第三个对象,

存在乱码字符,我们还是看一下其二进制内容:


其乱码部分是E8 A3 AC E0 A2 88,与第二个对象中的几个地址好像都沾不上边。关于样本的分析就到这里,我们大致可以总结出:样本文件中有三个嵌入的对象,其中第一个对象用于绕过aslr(虽然可能并没有什么作用),第二个对象是用来堆喷的,那么第三个对象想来应该就是结合堆喷实现漏洞利用的。我们在后面的分析调试中可以重点关注第三个对象相关的信息。


2 调试分析


我们用windbg附加WINWORD.EXE,然后打开exp,程序断在这里:

通过反汇编窗口可以看到崩溃处附近的代码:

显然,eax的值在call    wwlib!DllGetClassObject+0x42d4 (674698b0)被修改,我们在该处下断点跟踪看一下,重新加载样本

如期而断

程序断下后,我们跟进这个call看一下,



该处代码其实就是:

很明显,这里是一个“查表”的操作,多次跟踪可知,ecx指向的地址中存的值是固定的。所以上面的式子也可以转换成:eax*0x5c + 0x10 + [ecx],我们就可以通过这个式子去探探这个“表”里面具体是什么内容,


在之前调试时,触发崩溃时eax=4,当eax为4时,我们可以看到之前静态分析时的字符,但是其中乱码部分是088888ec,这串数在实现堆喷的对象中有用到,但是与嵌入的第三个对象有区别,第三个对像中的是E8 A3 AC E0 A2 88。那么问题来了,为什么不一样呢?我也不知道。根据这篇文章里面的测试代码可以知道,是由于编码的问题,新技能get。而eax=3和eax=5时分别指向OLEObject和idmap。根据之前静态分析的结果,这两者之间的是font。所以这个函数的功能就是在解析这些标签。

Ok,我们走出这个函数,看一下那一串+44h的赋值操作是什么,

看起来挺绕,简化一下就是

也就是前两行就完事儿了,跟一下

又见到这串字符串,而取出来的值是088888ec,说明这个地址应该就是构造的地址。样本崩溃处的代码是:

mov     ecx,dword ptr [eax],其下一行是call dword ptr[ecx+4]


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2018-5-14 09:58 被vlinkstone编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (9)
雪    币: 4
活跃值: (170)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你的第一个参考链接地址好像给错了吧.....是你自己的
2018-5-14 09:28
0
雪    币: 2092
活跃值: (959)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
3
Vuler 你的第一个参考链接地址好像给错了吧.....是你自己的[em_38]
尴尬了~~改好了已经
2018-5-14 10:00
0
雪    币: 184
活跃值: (161)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
4
给力!
2018-5-14 10:01
0
雪    币: 9662
活跃值: (4598)
能力值: ( LV15,RANK:800 )
在线值:
发帖
回帖
粉丝
5
你可以再看一下这篇以及这篇引用的几篇参考链接,然后再调试一下这个漏洞:  https://www.anquanke.com/post/id/103080
2018-5-14 13:09
0
雪    币: 2092
活跃值: (959)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
6
银雁冰 你可以再看一下这篇以及这篇引用的几篇参考链接,然后再调试一下这个漏洞: https://www.anquanke.com/post/id/103080
谢谢冰神指点~好多东西都是看冰神的文章学的
2018-5-14 19:41
0
雪    币: 113
活跃值: (76)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
触发漏洞样本呢?发上来大家可以跟踪一遍流程学习
2018-5-15 10:42
0
雪    币: 1795
活跃值: (63)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
感谢分享。。收益良多
2018-5-22 03:16
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2018-6-1 17:03
0
雪    币: 346
活跃值: (62)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
能分享一下 RTF 样本文档吗
2019-7-17 18:43
0
游客
登录 | 注册 方可回帖
返回
//