能力值:
( LV6,RANK:90 )
2 楼
这个漏洞还原容易,但由于其中涉及的数据结构不熟悉,很繁冗,究其导致错误根本原因异常困难。如果楼主搞清楚原因了,希望发来看雪与大家分享。帮顶
能力值:
( LV12,RANK:420 )
3 楼
呵呵,这个洞很简单,关键点:
mov XXX, esp
movsd
movsd
movsd
movsd
push XXXX
XXXXXXX 34 XXXXX
能力值:
( LV2,RANK:10 )
4 楼
楼上大侠能具体描述一下么,究竟在什么地方溢出导致漏洞呢?我现在发现漏洞好像与obj.msDataSourceObject(e[3]);这条语句无关,将它去掉后仍可正常执行shellcode
能力值:
( LV12,RANK:420 )
5 楼
后面一句只是为了提高一下利用率~随便替换成什么也可~前面的40次循环也是蒙人的~
能力值:
( LV6,RANK:90 )
6 楼
MJ都开口了。哈哈,能否再指明一点,比如在哪个位置。
小弟不才,不才
能力值:
(RANK:570 )
7 楼
调试过了,执行那几个函数的线程退出之后,竟然在另外一个线程中被激活...
而且那个MSHTML的结构,那个指针从一开始就在那里的,是静态数据.至少XP SP2的那个MSHTML是这样的
似乎是引发某种事件就能使那个指针申请到内存,并且将SHELLCODE转移进去.并且触发另外一个事件能让JSCRIPT执行那块内存的内容. 而OFFICE那控件最主要的作用就是激发那些事件
等MJ透露具体原理~~
能力值:
( LV6,RANK:90 )
8 楼
如果是同样的mshtml.dll,同样的加载基址的话,这个跳转的目标堆那就是是一致的。把一句指令的位置感觉像当做了一个函数虚表的地址。匪夷所思啊。
同期待MJ。
能力值:
(RANK:570 )
9 楼
溢出的部分是MSHTML初始化了一个结构,这个结构是静态数据,包括那个调用SHELLCODE指针,是本来就存在于那里的
打开其他网页的时候,也是那个硬编码,但是内存区域为空.
跑这个漏洞时,进入OWC10区域之前,那个静态指针就被申请到内存,并且填充了SHELLCODE了.
是几经周转,传到JSCRIPT里面,JSCRIPT根据虚表调用那个指针的.
如果你没分析出是从哪里跳到SHELLCODE的,打开DEP,用调试器一跑,直接找返回地址你就看到了
能力值:
( LV2,RANK:10 )
10 楼
从哪里跳到SHELLCODE的地方倒是能找到,但是OWC10.dll的什么地方有问题就不清楚了
能力值:
( LV2,RANK:10 )
11 楼
再问一下大家谁在OWC10.dll中找到Evaluate函数的地址了么?
能力值:
( LV11,RANK:180 )
12 楼
首先我们修改
var b = pingfan("%u0b0cଌ"); 到
var b = pingfan("쳌쳌");
修改这个语句的目的是 把 shellcode 的指令都改成 int3 指令
这样改成 int3 以后能保证shellcode 的被执行的第一条指令是 int3. 这样你就可以在
syserdebugger 里面使用 i3here on 命令当遇到 int3 指令的时候 弹出 syser debugger.
修改完这个 shellcode 以后我们可以用 ie 打开这个网页。如果shellcode 被正常执行的话。Syser debugger 会在执行第一条 shellcode 执行的时候弹出。
在 SyserDebugger 被激活的时候 EIP 是停在第一个被执行的 shellcode 的下一条执行。 因为我们把绝大多数的执行都变成了 int3 所以在 syserdebugger 弹出的时候你看到的都是 int3 指令。
在我的机器上 这个 EIP == 11cf6a4b ;这个值可能是不同的在不同的时候。
正常情况下 只有几种情况跳转到 shellcode . 从指令上来说可能就几种情况。
1 Jmp xxxxxx
2 Jmp [xxxxx]
3 call xxxxx
4 call [xxxxx]
5 ret
6 Jcc xxxxxxx
这个时候我们可以看 stack 窗口。 在 ESP 所指的地址中保存了的内容为 75c62e79 (我的系统是 英文版本的 xp + sp2 。我们用 u 75c62e79 看反汇编代码。 发现这地址的上一条指令是 75c62e76 ff511c call [ecx+1c] ;
我们发现了最终跳转到 shellcode 的代码是在 75c62e76 这个call 执行之后的某个指令跳转到shellcode 的 .
同时我们发现当前的 ECX 寄存器是 11cf6a4a , 前面我已经提到过 eip 是停在第一个 被执行的执行之后,就是 EIP == 11cf6a4b ,我们可以看到 ecx 和 eip 正好是差一个字节。 恰好
int3 指令是 一个字节,这个时候我们可以猜测 跳转到第一个 shellcode 的指令可能是
jmp ecx , 可能有人会问,我们为什么不猜测是 call 指令呢。 如果是call 执行一定会把返回地址先压入到堆栈。 我们可以通过 stack 命令看一下函数调用栈。我们发现堆栈里面最后一个地址对应的汇编是 75c62e76 call [ecx+1c] 就是上面提到的指令。 同时我们发现 [ecx+1c] 里面的值不等于 11cf6a4a 所以我们可以断定 最后跳转到shellcode 的执行不是 call. 所以我们可以把断点下在 75c62e76 这个地址。 例如 bpmb 75c62e76 x .
我们可以先结束本次的设置硬件断点后重新启动 IE 进行调试。 在我的机器上 当 用 IE 去浏览包含 shellcode 的网页时这个断点 会在第14 次以后跳转到 shellcode 上执行。
我们可以再一次重新调试这个 shellcode , 在第14次的时候,我们要单步更进 call [ecx+1c] 这条指令。 在我的机器上 ecx 的值是 7d73c270 ,[ecx+1c] 里面的值是 715a138
>cv
7D51A138 8B442404 MOV EAX,[ESP+04]
7D51A13C 50 PUSH EAX
7D51A13D F7401C80000000 TEST [EAX+1C],00000080
7D51A144 0F85ABA60800 JNZ 7D5A47F5
7D51A14A 83C00C ADD EAX,+0C
7D51A14D 8B08 MOV ECX,[EAX]
7D51A14F 894C2408 MOV [ESP+08],ECX
7D51A153 8B4804 MOV ECX,[EAX+04]
7D51A156 8B491C MOV ECX,[ECX+1C]
7D51A159 58 POP EAX
7D51A15A C7402007000000 MOV [EAX+20],00000007
7D51A161 FFE1 JMP ECX
7D51A163 90 NOP
在这里我们发现了正好有一个 jmp ecx . 正好和我们的猜测是吻合的。
我们可以把断点设置在 7D51A161 FFE1 JMP ECX 上面
然后我们就发现 跳转到 shellcode 的执行就是 7D51A161 FFE1 JMP ECX
能力值:
( LV6,RANK:90 )
13 楼
在等待owc10.dll加载后,75c62e76 断点 直接F9貌似2次就到了。
谢谢楼上,有详细的造成漏洞的缘故么?谢谢分享。
能力值:
( LV13,RANK:370 )
14 楼
MS程序员最近总犯常人最容易犯的错误啊COM啊COM
能力值:
( LV13,RANK:370 )
15 楼
其实就是赋值的时候没有加引用计数导致的。
能力值:
( LV12,RANK:420 )
16 楼
废话说了半天,结果是syser教程~漏洞一点都没涉及到,到执行这个INT3的时候早就不知道飞哪去了。另外调这个还用得着syser?
能力值:
( LV2,RANK:10 )
17 楼
ie7是不是不能正确跳转啊
能力值:
( LV2,RANK:10 )
18 楼
能不能说得再详细点啊
能力值:
( LV13,RANK:370 )
19 楼
Evaluate函数本应该对传入的WINDOW对象的引用计数加一,但它没有加,导致每次 Evaluate执行完后oleaut32.dll将WINDOW对象的引用计数减一,JS调用循环几次后WINDOW的引用计数被减为<=0,这就出问题了,后面一引用WINDOW对象就崩了,顺着这个思路去跟一下吧。
能力值:
( LV12,RANK:420 )
20 楼
楼上分析的不错~ 所以那个对象传window或者别的什么都可以,后面只要引用触发一下就可以了~
能力值:
( LV2,RANK:10 )
21 楼
是不是引用计数为0后,window对像被系统收回到堆上,可是堆上已经有shellcode了,这样再引用window的属性就会引用到shellcode了,不知道这样的思路对不对?
能力值:
( LV2,RANK:10 )
22 楼
精华啊 不过我已经看过了 哈哈 还是顶下 *^__^*
------------------------------------------------------------
张韶涵
湿巾机 这种东西,存在于一切人的生活之中。假如一个人丧失了
丰胸仪 可能无法生存在这个世界上。
能力值:
( LV3,RANK:30 )
23 楼
如何查到Evaluate的地址?
能力值:
( LV2,RANK:10 )
24 楼
这个可以
http://bbs.pediy.com/showthread.php?t=88279