目录
1.Apache Httpd 多后缀解析原因
Apache HTTP Server 在处理文件请求时,通常会根据文件的后缀来确定如何处理该文件。例如,.php文件会被交给 PHP 解释器处理,而.html文件则直接作为静态文件返回。
然而,在某些配置下,如果文件名包含多个后缀(例如 file.php.jpg
),Apache 可能会错误地将其解析为 PHP 文件并执行其中的代码,即使文件的后缀是 .jpg
。这种行为可能会导致攻击者上传恶意文件并执行任意代码。
如果运维人员给.php
后缀增加了处理器:
AddHandler application/x-httpd-php .php
那么,只要一个文件含有.php
后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。
该漏洞的根本原因在于 Apache 的 mod_mime
模块在处理多后缀文件名时的行为。默认情况下,Apache 会从右到左解析文件名的后缀。例如,对于 file.php.jpg
,Apache 会首先识别 .jpg
,然后识别 .php
。如果配置不当,Apache 可能会将文件视为 PHP 文件并执行其中的代码。
2.环境搭建
https://github.com/vulhub/vulhub下载压缩包
ubuntu下解压
安装容器:docker docker-compose
漏洞目录:~/vulhub-master/httpd/apache_parsing_vulnerability
docker-compose up -d 拉取漏洞环境,自动部署
docker ps -a 查看docker状态
然后直接在物理机访问虚拟机的ip
3.Apache Httpd 多后缀解析复现
先上传一个web.php.jpg文件,写入<?php pnpinfo()?>
然后burpsuit抓包,发送

然后访问
http://虚拟机ip/uploadfiles/web.php.jpg

发现成功解析
4.Apache Httpd 多后缀解析防御
#限制 PHP 文件的解析
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
禁止多后缀文件的解析
<FilesMatch \.(php\.|php[0-9]?\.|phtml\.|phps\.|php\d\.).+$>
Order Allow,Deny
Deny from all
</FilesMatch>