首页
论坛
课程
招聘
[原创][分享]CVE-2010-3333漏洞分析
2021-8-4 22:29 8239

[原创][分享]CVE-2010-3333漏洞分析

2021-8-4 22:29
8239

本帖为笔者日常学习笔记,如有错误,希望大佬指点。

参考资料:漏洞战争

1
2
3
操作系统:Windows XP SP3
漏洞软件:Office Word 2003 SP3版本
漏洞文件:使用MSF搜索该漏洞,可直接生成rtf漏洞文件

1.漏洞定位

主要问题是mso.dll的一处栈溢出漏洞
首先windbg载入rtf程序文件之后,发现了错误点

之后查看栈回溯,可以看到上一层是mso!Ordinal753+0x306e处,通过找到第一个call进行下断点30f4cc5d

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
mso!Ordinal6426+0x64d:
30e9eb88 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
0:000> kb
ChildEBP RetAddr  Args to Child             
WARNING: Stack unwind information not available. Following frames may be wrong.
0012a2bc 30f4cdbd 0012a428 00000000 ffffffff mso!Ordinal6426+0x64d
0012a2ec 30f4a597 0012a474 0012a428 00000000 mso!Ordinal753+0x306e
0012a538 30d4b199 00000000 0012a578 00000000 mso!Ordinal753+0x848
0012a560 30d4b148 30d4ae32 00f110d8 00f11110 mso!Ordinal4196+0x61f
0012a564 30d4ae32 00f110d8 00f11110 00f10fc0 mso!Ordinal4196+0x5ce
0012a568 00f110d8 00f11110 00f10fc0 30dc9d44 mso!Ordinal4196+0x2b8
0012a56c 00f11110 00f10fc0 30dc9d44 00000000 0xf110d8
0012a570 00f10fc0 30dc9d44 00000000 00f10d28 0xf11110
0012a574 30dc9d44 00000000 00f10d28 0012b324 0xf10fc0
0012a578 00000000 00f10d28 0012b324 00000000 mso!Ordinal2940+0x158fc
0:000> ub mso!Ordinal753+0x306e
mso!Ordinal753+0x305a:
30f4cda9 23c1            and     eax,ecx
30f4cdab 50              push    eax
30f4cdac 8d47ff          lea     eax,[edi-1]
30f4cdaf 50              push    eax
30f4cdb0 8b4508          mov     eax,dword ptr [ebp+8]
30f4cdb3 6a00            push    0
30f4cdb5 ff750c          push    dword ptr [ebp+0Ch]
30f4cdb8 e8a0feffff      call    mso!Ordinal753+0x2f0e (30f4cc5d)

成功到达30f4cc5d里面

接下来单步跟踪到溢出点,发现esi里面的内容好像有点意思了

之后将msf.rtf里面内容全改成11111111..,现在可以发现esi里面就是rtf文件里面的内容

2.动态调试

OD附加分析,直接跳到rep指令处,可以看到edi与ebp +0x14处就是返回地址

继续跟到ret处,当到ret 14的时候,就会跳转到jmp esp,(我自己找的跳板)

此时相隔0X18处,就是shellcode,而现在已经定位到自己找的jmp
esp指令了,所以可以直接跳到shellcode

最后成功执行shellcode

3.注意点

0XF4CB39处,如果跟进30F4CE43函数后会报以下错误,但是在0XF4CB26处有判断,ZF=1则可以让je跳转,跳过30F4CE43函数执行后面指令。

如果正常进入30F4CE43函数,就会崩溃

 

解决思路:在0xF4CB26处 ebp+0X10与ebx进行比较,正常执行流程ebp+0X10为shellcode内容,这样当cmp比较之后,后续指令je不会进行跳转,则会进入到30F4CE43函数报错,那么我们只需要将ebp+0X10处改为0即可,这样je跳转就能跳过不执行30F4CE43函数。

 

快速定位ebp+0X10的位置,首先将rtf按照如下方法更改

之后断点直接跑过来,55555555这段就是ebp+10的地方,所以将此地方改成00000000即可


【公告】【iPhone 13、ipad、iWatch】11月15日中午12:00,看雪·众安 2021 KCTF秋季赛 正式开赛【攻击篇】!!!文末有惊喜~

收藏
点赞2
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回