CVE-2010-3333漏洞调试、分析

admin 2014年12月12日11:16:16评论79 views字数 1361阅读4分32秒阅读模式

为了爱好应用程序安全新手的需要。

在此,我初步研究了一下微软3333漏洞的成因。

并试着定位到了样本中的shellcode。

现在就对这个入门级的漏洞做个简单的分析:


首先,我们还是用OD加载word.exe程序,按F9运行。

如图:

CVE-2010-3333漏洞调试、分析

图(一)

接下来,我们要具体分析3333漏洞出现的成因(具体的可以百度)。

经过查询,我们知道导致3333漏洞的原因:

是因为漏洞产生在MSO.DLL文件中,下文以Microsoft Office2003的MSO.DLL(版本号为:11.0.5606.0)为例。

我们将样本拖入运行的word中,如图:

CVE-2010-3333漏洞调试、分析

图(二)

此时,先别急着打开!

我们回到OD中,按下ALT+E,看看此时word加载了哪些模块。 - 低调求发展- J" W B1 c9 k3 B4 }/ Q" |; i- ^( f

CVE-2010-3333漏洞调试、分析

图(三)

我们看到,mso.dll(也就是导致3333漏洞的文件)已经被OD加载进来。

我们双击mso.dll,并同时按下ctrl+A,让OD对mso.dll进行分析。

等OD分析完成后,如图:

CVE-2010-3333漏洞调试、分析

图(四)

根据我们百度的结果(链接:http://wenku.baidu.com/link?url= ... MWivTpjMpcY1kS9rI87)可知:

函数在处理pFragments属性的值时,未严格检查属性值所占用的空间大小,导致memcpy函数在复制属性值时溢出堆栈。


在此,我们选用“mov bx , 5000000”这句指令,来定位处理pFragments属性值的函数

(当然这种定位方式,是在已知漏洞位置的情况下。

在调试0day时,因为我们不知道具体的漏洞点,此种方法便显得无能为力。

在这种情况下我们可以通过定位WINEXEC函数的来定位shellcode,从而调试、定位出具体漏洞点.........

其实分析0day是个很复杂过程,这个话题我们以后在讨论)。

如图:

CVE-2010-3333漏洞调试、分析

图(五)

我们在“mov bx , 5000000”下好断点后,

就可以点击刚才word弹出的是否打开对话框(图二中对话框),

选择“打开”。如图:

CVE-2010-3333漏洞调试、分析

图(六)

此时我们看到EIP寄存器断在了“mov bx , 5000000”指令处。

通过之前百度到资料,我们知道导致栈溢出的函数位于:30F4CC93处的 call dword ptr ds:[eax+0xlc] 函数,

我们单步F7跟进来,如图:

CVE-2010-3333漏洞调试、分析

图(七)

我们通过对百度结果的分析,

可知:当执行完“rep movs dword ptr es:[edi],dword ptr ds:[esi]”栈中的数据就会产生溢出(此时,我还未执行这句指令)。

现在我们看看未溢出时,栈空间的情况:

CVE-2010-3333漏洞调试、分析

图(八)

接下来,我们执行一下“rep movs dword ptr es:[edi],dword ptr ds:[esi]”这句指令,看看栈中的变化,如图:

CVE-2010-3333漏洞调试、分析

图(九)

注意:请读者自行比较图(八)与图(九)的区别。


接下来就是执行shellcode了,至此我们将这个3333漏洞用OD分析完了。

如果要想从全局了解3333漏洞的成因,全面的掌握3333漏洞的情况,还得借助IDA分析工具(可谓是反汇编的利器),至于对shellcode的分析和编写在此就不叙述了。


最后,想跟大家分享一句心得:我们研究漏洞的目的不是为了去搞破坏,而是更好完善网络安全,更好的服务他人。


本文始发于微信公众号(T00ls):CVE-2010-3333漏洞调试、分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2014年12月12日11:16:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2010-3333漏洞调试、分析http://cn-sec.com/archives/352878.html

发表评论

匿名网友 填写信息