造成原因
Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。
如果Apache配置文件(Apache\conf\httpd.conf)中存在以下代码:
AddHandler application/x-httpd-php .php
那么,当文件的后缀中存在 .php
时该文件就会被解析为php文件。例如,photo.php.jpg
就会被解析为php文件。
从而,我们可以利用apache的此特性绕过白名单检测机制,从而getshell。
环境搭建
环境我们通过vulhub直接搭建就OK了。
这里要求我们上传一个文件
我选择上传一个phpinfo文件,利用burp抓包分析
上传不成功,提示原因为不支持此后缀文件的上传。
现在我们将此文件的后缀进行修改,改为 .php.jpg
,再次上传
发现上传成功。
那我们为什么要这样上传呢?这里就牵扯到了另外一个知识点,apache的解析顺序
Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。
所以刚才上传的文件,apache从右开始解析,第一个解析的是jpg,这正是服务器允许上传的文件类型,所以就成功上传。
接下来,我们去访问这个phpinfo.php.jpg
发现成功解析,证实了Apache的多后缀解析漏洞。
那我们该怎么杜绝这种漏洞呢?
1、上传后的文件要重新命名。
2、禁止apache配置文件中出现错误的配置。另外添加以下代码:
<FilesMatch “.(php.|php3.|php4.|php5.)”>
Order Deny,Allow
Deny from all
</FilesMatch>
禁止*.php.*文件的访问权限。