首页
社区
课程
招聘
[求助]溢出文档无法溢出的问题
发表于: 2013-3-7 17:12 21320

[求助]溢出文档无法溢出的问题

2013-3-7 17:12
21320
一、问题表现形式:
溢出文档(测试环境:xp sp2 32位 + ms office 2003):
方式1:输入命令C:\E11714F04618FB8846BDF384B7704366.doc,文档能溢出。
方式2:输入命令"C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE" /n /dde C:\E11714F04618FB8846BDF384B7704366.doc,则不会溢出,去掉/n /dde参数一样。

二、问题本质:
在C/C++代码中:
用ShellExecute启动溢出文档进程,效果同方式1。
用CreateProcess启动溢出文档进程,效果同方式2。
但无论ShellExecute,还是CreateProcess,最终都会调用CreateProcessInternalW。
注:当lpVerb的值为NULL或"open"时,ShellExecute最终会调用CreateProcessInternalW

三、究其原因:
由于对OD和IDA不够熟练,因此探索原因的过程变得极其艰难。
从最后得到的CreateProcessInternalW的参数信息来看,在做到两种方式的参数信息无区别的情况下,效果还是不一样
试图探索,无奈水平着实有限,下面是我找到的原因(不一定对)
以CreateProcess方式打开溢出样本无法溢出的原因如图,图中地址0x275C8952处访问违规,文档在此处退出,应该就是导致无法溢出的直接原因。
问题来了,那为何以ShellExecute打开此文档,此地址就没违规,百思不得其解。
求高人解答...
以下是对应的溢出文档。
E11714F04618FB8846BDF384B7704366.doc

注:此样本溢出体现形式:启动菜单下产生一个"update.exe"并启动,产生并打开一个"通知.doc"。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 496
活跃值: (301)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
2
文档呢?补齐
2013-3-7 23:47
0
雪    币: 59
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
文档呢?去那里了?
2013-4-7 18:42
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
文档呢?求细节
2013-4-8 09:22
0
雪    币: 106
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
当前工作目录的原因?
2013-4-8 09:50
0
雪    币: 7
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ybt
6
不好意思了,没想到还有这么多人关注,感激不尽。
之前由于帖子没人关注,而且附件(样本)是保密性质的,所以才把附件删除。
2013-4-22 13:02
0
雪    币: 7
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ybt
7
工作目录相同
2013-4-22 13:07
0
雪    币: 29380
活跃值: (7920)
能力值: ( LV15,RANK:3306 )
在线值:
发帖
回帖
粉丝
8
直接打开的栈布局与双击打开的栈布局不一样
2013-4-26 09:20
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个样本的格式挺有意思,以前还没看到过,后来一个个装补丁,终于发现是027,菜鸟好累
2013-5-27 10:10
0
雪    币: 7
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ybt
10
科普下,027是啥?
2013-6-19 10:59
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
ms12-027,或者cve-2012-0158
2013-7-24 07:57
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你自己做的自己都不知道是哪个漏洞吗?有什么好样本,分享一下呗
2013-7-24 07:59
0
雪    币: 1149
活跃值: (918)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
13
其实问题在于,文档类的漏洞,你第一次打开构造好的样本,第一次打开文档的只是为了触发执行update.exe 这个时候的文档是有缺陷的,在shellcode里面对文档进行修正然后createprocess 通知.doc (然后强制退出原来的进程,这个时候导致文档被破坏),这时的doc已经是修正后的doc文档,所以你看到了文档正常起来了;但就因为这样 ,被破坏后正确文档你第二次以及后面去打开时,触发不了shellcode 的执行 ;

ps: 你可以在调试的时候每一次都放新doc,与路径无关,每次都可以稳定触发执行,update.exe 写的不错! 而且在xp下执行时和lz说的执行方式没关系... 都一样创建进程。。。。除非有权限创建进程的时候就有区别,比如win7 -win8 这个时候就有委托创建的问题....右键和双击就有区别,因为机制不一样....
2013-7-24 16:29
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
word.exe
2013-8-14 09:11
0
雪    币: 7
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ybt
15
惭愧,我主要是一个写代码的,工作需要才去分析病毒,而漏洞方面基本没接触。
2013-9-6 16:15
0
雪    币: 7
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ybt
16
我都是每执行一次样本,即恢复虚拟机快照,不会运行第二次。
你若不信,可以试下两种执行方式,看下结果是否相同。

公司有同事说是不同的进程启动方式造成堆内存不同导致的,跟楼上一哥们所说的栈布局不同差不多。
2013-9-6 17:27
0
雪    币: 7
活跃值: (346)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ybt
17
公司有高人解答如下:
CreateProcess  和ShellexecuteEx  栈的大小一样  但是它们对栈的使用不一样  CreateProcess的指针偏下   导致栈剩余的空间不足够拷贝shellcode  最后因为非法访问而崩溃。
2014-1-2 17:15
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
T哥好棒
2014-1-22 11:43
0
游客
登录 | 注册 方可回帖
返回
//