前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​[CVE-2010-3333]Office RTF文件pFragments属性栈溢出漏洞

​[CVE-2010-3333]Office RTF文件pFragments属性栈溢出漏洞

作者头像
yichen
发布2021-02-15 12:49:28
7100
发布2021-02-15 12:49:28
举报

通过栈回溯来分析漏洞,使用 msf 生成一个能够 crash 的文件,然后打开 office word,windbg 附加进程之后 g 运行起来

代码语言:javascript
复制
search cve-2010-3333
use exploit/windows/fileformat/ms10_087_rtf_pfragments_bof
set target 6
exploit

然后把 msf 生成的文件拖进去打开,这时候 windbg 会断下来

代码语言:javascript
复制
30e9eb88 f3a5  rep movs dword ptr es:[edi],dword ptr [esi]

关掉,然后重新附加一下,下个断点:bp 30e9eb88 再运行起来,把文件拖进去打开,会断下来,此时看一下 30e9eb88 附近的反汇编,可以看到,两个 pop 之后是 ret

可以推断出 ret 时的返回地址其实是 0x30f4cc96

那 IDA 里面找一下这个地址,他是在函数 sub_30F4CC5D 中的

这条命令所在的函数是通过 0x30f4cc93 的 call dword ptr [eax+1Ch] 调用的 sub_30E9EB62,这点可以根据 windbg 中的 k 命令来看出来,在 30e9eb88 断下来之后:

根据反汇编得到的函数地址可以推断出:30f4cd58 调用 30f4cc5d 调用 30E9EB62

0012a24c 中显示的返回地址是红色箭头指向的那个 call 的返回地址

重新运行附加一下在 30f4cc5d 下个断点,然后跑起来,当程序断下来的时候 g 30f4cc93 可以看到要调用的是 30e9eb62

它的三个参数分别是:

其中 ecx 是前面 lea ecx,[ebp-0x10h] 得来的

在调用 30e9eb62 之前栈上的空间是这样的,011e1678 是第一个参数,0012a20c 是第二个参数,后面的 00000000 是第三个参数

进入 30e9eb62 函数之后把第二个参数放在了 edi 中

然后是 esi 的赋值:

先把第一个参数放在了 eax 中

然后把它的 +8 处的值放在了 ecx

然后 ecx 与 0xffff 进行了与运算,只保留了 c8ac,这个 c8ac 是:

然后乘上了一个在栈中的数,变成了 0

接下来要做的就是把 esi 指向的地址中的内容循环赋给 edi 那个地址,然而循环次数是 ecx 决定的,edi 的值是 ebp-0x10,所以很容易溢出了

循环赋值图示:

这里对应的就是 msf 生成的样本中的 acc8 后面那块内容

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档