漏洞介绍
漏洞原理
apache支持php有多种模式,常见的有module、cgi、fastcgi等,此漏洞存在于module模式(关于CGI、FastCGI、PHP-FPM与Module模式传送门)。
Apache在遇到多个后缀的文件时,尝试从后往前解析,直到解析到可解析的为止。例如test.php.xxx就按照php去解析,test.php.aaa.jpg就按照php去解析。
根据这个原理,我们可以上传文件名如shell.php.xxx的文件,以此来绕过后端黑名单的检测,从而上传成功而且又能被Apache按照php去解析。
环境说明
PHP7、任意版本的使用module模式与php结合的apache
影响版本
使用module模式与php结合的所有版本apache存在未知扩展名解析漏洞,使用fastcig模式与php结合的所有版本apache不存在此漏洞。
影响说明
绕过服务器策略,上传webshell
漏洞成因
apache配置httpd.conf
AddHandle application/x-httpd-php .php
或者
<FileMatch ".+\.ph(ar|p|tml)">
SetHandler application/x-httpd-php
</FileMatch>
在/etc/mime.types中有定义哪些后缀是apache识别的
漏洞搭建
进入相应目录
启动容器
docker-compose up -d
查询端口
docker ps -a
漏洞复现
尝试上传文件,用burp抓包:
上传php一句话木马,失败
将文件名改为1.php.jpg,然后上传,成功。
通过蚁剑连接
漏洞防御方法:
1,拒绝所有文件名含有.php的文件
<FilesMatch “\.php\.”>
require all denied
2,处理程序只处理以.php 结尾 的文件
首先将上一个防御方案的配置命令注释掉
再注释掉原本的处理出现配置命令AddHandler application/x-httpd-php .php
<FilesMatch “.+.php$”>
SetHandler application/x-httpd-php