前段时间由于工作要求,我需要对WORD 2000解析doc文件格式时存在的溢出漏洞进行分析与利用。从网上找了找,一共有MS03-035、MS03-050、MS05-023、MS05-035这四个漏洞公告,影响的都是WORD 2000,(据说WORD 2002可能也受影响)。其中,MS03-050漏洞尽管是03年底发现的漏洞,但是到05年7月底才爆发了针对该漏洞的“万珍”蠕虫,给网络造成了不小的损害,况且现在使用WORD 2000的用户仍然很多,因此觉得这个漏洞目前最有利用的必要。在分析的过程中,我遇到了很多的困难,也走了不少的弯路,不过经过1个多月时间后最终还是比较完美地解决了。在收获信心与提高能力的同时,我当然不会把好东西独享。下面,我就和大家一起来回顾对该漏洞艰苦的调试之旅,希望朋友们看了之后能有所收获。文中讲的东西都更多是基于漏洞调试技术本身及简单的利用,至于如何复杂地利用基本都是与木马技术相结合的,由于工作保密关系就不多谈了,大家可以自由发挥。
寻求现成Exploit---无功而返
首先还是看看漏洞公告吧。
根据公告,漏洞原因大家应该大致了解了,WORD在解析doc文件的时候,未对宏的名称进行长度检测,导致了缓冲区溢出。除此以外,公告没有其它任何信息,甚至连它是堆栈还是堆溢出漏洞我们也不确定。对于分析这样的漏洞,我一向采取先解决问题(找Exploit),有空再深入研究的方式。二话不说,打开Google,输入漏洞关键。
在搜索结果中的众多URL中一一浏览,发现这些URL几乎全是关于漏洞概述的,不要说Exploit,就连doc样本文件都找不到一个。一周时间过去了,完全没什么进展。但有一点是肯定的,在面对困难时应该具有充分的黑客精神,绝对不能随意放弃。靠别人不如靠自己,一条路走不同就换另一条,我决定自己分析这个漏洞。
既然该漏洞是WORD在解析doc文件宏名称的时候发生了溢出,那就从构造超长的宏名称开始,可我连WORD宏机制都完全不了解, 看来还只能从这些基础知识入手。下面的内容都是在Windows 2000(或XP SP2) + WORD 2000这样一个平台上进行的。
了解WORD宏机制——测试未果
大概从WORD 97开始,就提供了宏机制。宏是完成一定功能的命令的集合,WORD中各菜单、按钮执行的功能(如新建、打开等),实际上都是用宏的形式对多条命令进行了封装。WORD宏是使用VBA来编写的,目的是使得用户能在WORD中编写完成指定功能的代码,从而扩充了WORD的功能。VBA具体语法和VB一样,我们可以在编写宏的时候调用WINDOWS API,但有些函数VB中没有,宏病毒就是利用宏复制语句来达到感染的目的。宏有两种存储形式,一种是存储doc模板文件中&