很多次听到人说apache的“分析系统漏洞”了,恰好今日又有些人问,那么就简易科谱一下这一“分析系统漏洞”是什么东西。
先看来检测流程和效果的比照吧。
結果一
最先,我安裝了apache 2.x版本号,与此同时以module方法使apache与php融合,检测发觉的确存有那样的分析系统漏洞。

結果二
随后,我将apache与php的融合方法改动为fastcgi方法,检测发觉爆500不正确,不会有那样的分析系统漏洞。

报错:
1Bad file descriptor: mod_fcgid: don't know how to spawn child process: f4ck.php.x
含意便是不晓得该怎样分析这一文档。
結果出来,那麼针对危害范畴这方面,在当前全部的apache版本号中都存有此问题,但只适用以module方法分析php的apache,应用fastcgi方法分析php的apache不受影响,应用cgi方法分析php的apache是不是危害未检测。
下边来简易介绍一下检测环节中我发现的一点工作经验。
先来说一下apache的主环境变量httpd.conf,检索“DefaultType”,就可以见到那么一段注解和默认设置配备:
# # DefaultType: the default MIME type the server will use for a document # if it cannot otherwise determine one, such as from filename extensions. # If your server contains mostly text or HTML documents, "text/plain" is # a good value. If most of your content is binary, such as applications # or images, you may want to use "application/octet-stream" instead to # keep browsers from trying to display binary files as though they are # text. #10DefaultType text/plainDefaultType存在的价值是告知apache该如何处理不明后缀名的文档,例如f4ck.xxx那样的文档,后缀名是xxx,这显然没有一个常规的网页页面或脚本文件,这一主要参数便是告知apache该怎么处理这类不明后缀名的文档。
主要参数DefaultType的初始值是“text/plain”,也就是碰到不明后缀名的文档,就把它作为一般的txt文本或html文档来解决。
检测一
例如我将下列编码储存为f4ck.xxx:
1F4ckTeam apache test
浏览它,依照默认设置的apache配备,这一文档是会被浏览器显示出去实际实际效果的:

这也是针对文档主要内容为HTML编码的不明后缀名文档而言,文档中的HTML编码会被电脑浏览器实行。
检测二
那麼,针对文档主要内容为php代码的不明后缀名文档而言,这种php代码会被分析吗?
看来检测結果:

能够看见,这儿包括php代码的不明后缀名的资料被作为txt文档解决了。
可是,假如将文件夹名称改成f4ck.php.xxx,那麼便会被以module方法运作php的apache分析,为何?
由于Apache觉得一个文档可以有着好几个后缀名,就算沒有文件夹名称,还可以有着好几个后缀名。Apache觉得应当从左往右逐渐分辨分析方式的。假如最右边的拓展名叫不能鉴别的,就再次往左分辨,直到判断到文件夹名称才行。
官方网表述见:http://httpd.apache.org/docs/current/mod/directive-dict.html,检索“extension”就可以见到。
摘抄官方网表述:
extension
In general, this is the part of the filename which follows the last dot. However, Apache recognizes multiple filename extensions, so if a filename contains more than one dot, each dot-separated part of the filename following the first dot is an extension. For example, the filename file.html.en contains two extensions: .html and .en. For Apache directives, you may specify extensions with or without the leading dot. In addition, extensions are not case sensitive.
那麼,针对“检测一”和“测试二”而言,apache发觉这一文档的后缀名是不明的,那麼它会首先看在后缀名以前是不是有其余的可鉴别的后缀名,可是该实例中的详细文件夹名称为“f4ck.xxxx”,在后缀名“xxxx”以前沒有其它的可鉴别后缀名了,因此apache就依照httpd.conf中主要参数DefaultType的值来决策该文件的处理方法,即做为txt文档解决。
一样的,针对“結果一”和“结果二”而言,也是根据那样的方法来逐渐明确不明后缀名文档的解读方法,最先apache发觉这一文档的后缀名是不明的,那麼它会首先看在后缀名以前是不是有其余的可鉴别的后缀名,在该实例中的详细文件夹名称为“f4ck.php.x”,那麼apache就发觉在不明后缀名“x”以前有一个可鉴别的后缀名是“php”,那麼apache便会觉得这是一个php文件,便会把这个文档依照分析php文件的方法来分析。
说到这儿,就不能不提一下,apache针对后缀名的界定全是写在conf/mime.types文件中的,看一下图:

文档mime.types界定了apache解决不一样后缀名文档的方式,文档httpd.conf中主要参数DefaultType的值界定了apache解决不明后缀名文档的方式。
此外,文档httpd.conf中句子块“”中可以用“AddType”语句来界定apache分析不一样后缀名文档的方式。
解决和分析是根本不一样的定义,这就仿佛针对apache php融合的平台而言,apache是网站服务器,php是分布式数据库,apache只负责任接受/回应HTTP要求,php却承担.php文件的表述实行。Php将.php文件表述实行结束后,将产生的HTML编码发给apache,再由apache将HTML编码发给手机客户端。
此外说一下,后缀名rar并沒有在文档mime.types中发生,因此要是碰到可以提交rar文件且与php的融合方法为module方式的apache,则可以立即提交相近“f4ck.php.rar”的资料来得到webshell。
解决方法一
在httpd.conf或httpd-vhosts.conf中添加下列句子,进而严禁文件夹名称文件格式为*.php.*的访问限制:
<FilesMatch ".(php.|php3.|php4.|php5.)"> Order Deny,Allow Deny from all </FilesMatch>解决方法二
假如必须保存文件夹名称,可以改动程序流程源码,更换文件上传名中的“.”为“_”:
$filename = str_replace('.', '_', $filename);假如不用保存文件夹名称,可以改动程序流程源码,将文件上传名重新命名为时间格式 随机数字的文件格式。
汇总:在网上说的“低版的apache存有不明后缀名分析系统漏洞”的表述是失误的,恰当的表述应该是应用module方式与php融合的全部版本apache存有不明后缀名分析系统漏洞,应用fastcig方式与php融合的全部版本apache不会有此系统漏洞。而且,想运用此系统漏洞务必确保文件扩展名中最少含有一个“.php”,不然将默认设置被做为txt/html文本文档解决。
我以前也听到一个见解是:低版的apache的分析才存有这个问题,但事实上这一分析的问题跟apache版本号多少不相干,与解决扩展名的方式相关。如同iis7的分析系统漏洞与iis7自身没有关系,反而是跟Fast-CGI有关系。