apache_parsing_vulnerability(Apache 多后缀解析漏洞)¶
漏洞描述¶
配置apache时,对于apache配置不熟练,配置命令不清楚,在配置PHP文件处理程序时,配置命令存在问题:位于漏洞环境目录的 conf/docker-php.conf里的配置命令(AddHandler application/x-httpd-php .php),该命令会将后缀中只要含有.php的文件都会被处理程序解析,这导致攻击者可通过多后缀绕过文件上传限制以.php结尾的机制,并使之被处理程序执行。
影响版本¶
与Apache和PHP版本无关,只与用户配置有关
环境配置¶
- Vulhub项目
- Docker-compose启动

漏洞复现¶


修改文件名为filename.php.png

可以看到成功当成PHP文件解析
Tip
该漏洞主要作用是绕过对文件后缀的限制,如在Vulhub环境中,直接上传PHP文件会被拦截,但可以通过这种多文件后缀解析漏洞来绕过这点
漏洞原理¶
Apache默认一个文件可以有多个以点分隔的后缀 , 当右边的后缀无法识别 ( 不在 mime.types 内 ), 则继续向左识别。 当我们请求这样一个文件:
1.php.aaa aaa-> 无法识别 , 向左 php -> 发现后缀是 php ,交给 php 处理这个文件最后一步虽然交给了php 来处理这个文件,但是 php 也不认识 .aaa 的后缀 , 不解析
其实,解析漏洞的产生, 是由于运维人员在配置服务器时,为了使 apache 服务器能解析 php ,而自己添加一个handler
它的作用也是为了让 apache 把 php 文件交给
php_module解析 , 但是注意到它与 SetHandler: 它的后缀不是用正则去匹配的。所以 ,在文件名的任何位置匹配到php后缀,它都会让php_module解析。

关于Apache配置文件可参考:https://blog.csdn.net/WuLex/article/details/106868978
修复建议¶
- 通过正则方式来对其进行限制
在配置文件中添加如下内容,匹配样式为 .php. 的文件并拒绝访问(该漏洞环境配置文件位于漏洞环境目录的 conf/docker-php.conf 生产环境中按照具体情况而定)
<FilesMatch "\.php\.">
require all denied
</FilesMatch>
or
<FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow Deny from all
</FilesMatch>
- 将原本的
AddHandler application/x-httpd-php .php注释掉,然后利用正则表达式单独为.php的文件添加处理程序