发现微软的这个漏洞纯属巧合,我是在测试一款国内开发的 Web Server 程序时无意发 现的。被测试的Web Server程序名为“方配网站服务器 v2.0”,如图1所示。 ![]() 在测试的时候,我们在网站本地目录下放置了一个名为“1.j”的文件,然后,在浏览 器中访问“http://localhost/1.j”这个网址,效果如图2所示。 ![]() 从图 2浏览器上方显示的信息我们看到,原来“方配网站服务器v2.0”程序是借助微 软的IIS 7.5 Express程序开发的。 在默认情况下,“方配网站服务器v2.0”在其 Web目录“C:\Program Files\FangPage\FPWebServer\sites\wwwroot”下放置了一个“index.aspx”文件,该文件 可以用来查看当前系统的一些基本信息。此时,我们有了一个念头,众所周知,老版本的 IIS 存在着多个文件名解析漏洞,如名字中包含有“asp”字眼的文件夹会被当做 asp 类型 解析,包含有“;”字眼的文件也会被错误的当做已知文件类型来解析。除此之外,还包括 80sec发现的源代码泄露漏洞等等。很多漏洞都是与文件或者文件夹的名称相关,那么对于 IIS 7.5 Express是不是也存在这样的问题呢? 抱着这样的思路,我们开始了第一个测试。在Web服务中,“#”符号常常被当做特殊 字符来处理,例如一个网址中“1.asp#”,其实就等效于“1.asp”文件。但是,如果我们在 Web服务的本地目录下,先建立一个名为“1.asp#”的文件,然后再浏览器中请求这个文件, Web服务程序会如何处理呢?在这之前,我们在浏览器中请求“1.asp#”文件时,必须将“#” 符号编码为“%23”,不然就不会正确请求到“1.asp#”文件。 通过测试,我们发现对于IIS 7.5 Express来说,在Web本地目录下是不是存在带有 “#”符号的文件,以及通过浏览器请求这些文件,似乎都不会影响到 IIS 7.5 Express 程 序的正常运行,难道是我们想多了?可是接下来的测试,我们有了一个惊人的发现。 在Web本地目录下,我们放置一个名为“1.aspx#”的文件,该文件中的代码可以很简 单。然后,我们现在打开任务管理器,注意其中的“iisexpress.exe”进程的CPU占用率, 为什么要注意这个,待会你就知道答案了。打开浏览器,在其中输入网址 “http://localhost/1.aspx%23”,回车后,请注意观察任务管理器中“iisexpress.exe” 进程的CPU占用率。你会发现此刻,“iisexpress.exe”进程的CPU占用率一下子上升到了 近%50,如图 4所示。 ![]() 如果,我们此刻在浏览器中再请求访问一次“http://localhost/1.aspx%23”这个网 址,你就会发现你的系统已经开始反应缓慢,因为“iisexpress.exe”进程的CPU占用率已 经快 100%了。 毫无疑问,当前的IIS 7.5 Express已经不能够再正常工作了,一个典型的拒绝服务漏 洞被我们发现了。 上面的测试,我们是在 XP SP3 系统下进行的,其它版本的操作系统我们没有进行测 试,有兴趣的朋友可以自行测试一下。在发现上述安全漏洞之后,我们单独下载了微软的 IIS 7.5 Express,在默认安装下,我们测试发现上述拒绝服务漏洞依旧存在。该漏洞在某 些特定的场合下,可以被恶意攻击者利用来对Web服务器进行攻击,造成服务器瘫痪。分析 上述漏洞形成的原因,应该是因为程序陷入到了对“#”符号进行分离后解析文件类型的死 循环当中。 最后,本文旨在讨论安全技术,读者请勿使用文中漏洞进行任何违法活动。 |