我相信大家也都知道iis是windows系统中使用最多的web服务组件,但是在internet使用最多的是web服务组件却不是iis而是apache。几乎大多数unix/linux系统中使用的都是apache,另外,有相当一部分windows系统采用了apache(apache主要分为unix/linux版本和windows版本,这是其被广泛应用的主要原因之一)。apache快速、可靠、可通过简单的api扩展,perl和python解释器可被编译到服务器中。apache完全免费,完全源代码开放。正是因为其超凡的稳定性和安全性,所以大中型服务器都喜欢使用apache来架设web服务器面很少采用iis。
就如同iis存在许多安全漏洞一样,apache也曾经被公布过许多漏洞。我将要给大家介绍的就是apache mod_rewrite远程溢出漏洞,这个漏洞已经公布了有很久了,不过在当时公布的漏洞利用工具效果却不怎么好,直到后来有人重新编写了溢出程序,才使得这个漏洞的利用变得方便了起来。这个漏洞影响以下的apache版本:1.3.28以上至1.3.27以下的版本,2.0.40以上至2.0.59以下的版本,2.2.0以上至2.2.3以下的版本。可以说影响的范围还是非常广泛的。漏洞存在于apache的mod_rewrite模块中,产生腋臭的函数是escape_absolute_uri(),下面是产生漏洞代码的简单分析。
如果uri包含第五个“?”,就在第2740行中造成了溢出,因为正常情况下uri只应该有4个“?”。程序员在编写该处的代码时考虑不周全,才造成了这个溢出漏洞的存在,所以大家在编程时一定要引以为戒。
要想利用这个漏洞,就要要求apache被设定为加载mod_rewrite.so模块,关于mod_rewrite模块的作用,因为限于篇幅,所以我就不详细介绍了,感兴趣的话,大家可以从网上搜索到它的详细说明。
要想快速的知道某个服务器是否存在这个漏洞,我们可以打开ie浏览器,在地址栏进行如下的提交http://ip/test/ldap://localhost/aaaaaaaaaaaaaaaaaaaaa%3faaaaaaaaaaaaa%3faaaaaaaaaaaaaaa%3faaaaaaaaa%3faaaaaaaaaa%3fbbbbbbbbbbbbbb,其中test就是RewriteRule中所设置的路径,如果服务器没有返回302页面或者在处理之中记录分割错误的话,那么就说明这个服务器就存在漏洞。
下面我们来测试一下,测试主机环境为windows sever 2003和apache 2.0.58.
我在apache的配置文件httpd.conf中添加如下的设置,其中设置了rewrite路径就是test。
在浏览器的地址栏中进行如下的提交http://192.168.58.55/test/ldap://localhost/aaaaaaaaaaaaaaaaaaaaa%3faaaaaaaaaaaaa%3faaaaaaaaaaaaaaa%3faaaaaaaaa%3faaaaaaaaaa%3fbbbbbbbbbbbbbb,返回了无法显示网页。
我找到的漏洞利用代码是基于unix/linux系统的,在unix/linux系统下使用gcc命令将漏洞利用代码编译成可执行文件,命令格式为gcc apache.co1。表示将源文件编译为可执行文件,文件名就叫1。然后我们可以直接执行./1来查看该漏洞利用工具的详细用法。
工具的详细使用格式为“./1 <对方ip><rewrite路径>”,因此我们输入./1 192.168.58.55 test。
溢出成功了,本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。