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

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

2013-3-7 17:12
21035
一、问题表现形式:
溢出文档(测试环境: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"。

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

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

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

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