Apache解析漏洞的原理
目前解析漏洞主要存在于三大WEB服务程序,分别是IIS、NGINX和APACHE。
IIS6.0下主要是有两个解析漏洞,一个是目录解析,形如/xx.asp/xx.jpg,另一个就是文件解析,形如xx.asp;.jpg,可通过此漏洞上传shell,对服务器危害较大。
著名的nginx畸形解析漏洞。实验室已经有这个漏洞的实验,不再赘述。
Apache解析漏洞。测试环境是php+apache。Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断。比如xxx.php.rar对apache来说rar是不可解析的,所以就会解析成xxx.php。
Apache文件解析漏洞与用户的配置有密切关系。严格来说,属于用户配置问题,其实apache本身根本不存在所谓的解析漏洞。
Apache解析漏洞简单实验
通过简单上传页面证明apache解析漏洞:
登录客户机,用浏览器打开地址http://10.1.1.31/upload/,这是根目录下的upload目录,也是要上传的文件目录,现在是空的。

进入上传界面,先新建一个test.php.rar,内容是<?php phpinfo();?>然后上传。

Apache并不认识rar后缀名,对它来说会看成test.php。解析成功。其实整个漏洞的关键就是apache的"合法后缀"到底是哪些,不是"合法后缀"的都可以被利用。所以点开上传的那个文件,就会进入phpinfo.

防御:
由上面可知,在http://10.1.1.31/upload/下已经成功上传了test.php.rar,并且可错误解析成php。因此可以通过修改apache配置防御。
现在对apache的配置文件做适当修改,在文件中添加下面几行代码:
<FilesMatch".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>
禁止*.php.*文件的访问权限
保存并重启apache。现在再来测试,看不到上传的test.php.rar了。

可以通过修改程序文件来修改漏洞。
访问地址http://10.1.1.31/Defense.html,这是经过代码加强过后的上传页面,
再次上传test.php.rar。

看看后端代码:

除此以外,防御措施还可以是:
1.升级到高版本
2.将上传的文件重命名为时间戳+随机数+.jpg格式并禁用上传文件目录执行脚本权限