24、文件上传漏洞——Apache文件解析漏洞

文章目录

一、环境简介

Apache文件解析漏洞与用户配置有密切关系。严格来说,属于用户配置问题,这里使用ubantu的docker来复现漏洞:

bash 复制代码
apt-get install apache2
apt-get install php7.0
apt-get install libapache2-mod-php7.0

一、Apache与php三种结合方法

  • CGI:共同网关接口,是HTTP服务器与机器上其他程序进行通信的一个接口,让web服务器必要时启动额外的程序处理动态内容。
  • FastCGI:CGI解释器的更快实现,可以提供良好的性能、伸缩性等。
  • Module:php作为apache的模块,也是用的最多的一种方法。

Apache文件解析漏洞就发生在Module结合方法上。

查看apache和php的结合方法:

二、Apache解析文件的方法

一个重要文件/etc/mime.types

这里记录了大量的文件后缀和mime类型,当客户端请求一个文件时,如果后缀在这个列表里,那么apache一方面返回对应的content-type给浏览器,一方面根据文件的MIME类型进行下一步处理。如果不在列表,apache不会返回content-type给浏览器,而是直接返回文件内容,由浏览器自动处理。

cat /etc/mime.types | grep php

这里注释掉关于php的全部项。例如对于第一项后缀名为php/pht/phtml的文件,apache将会将其给php处理器进行解析。

三、Apache解析php的方法

/etc/apache2/mods-enabled/php7.2.conf

  • apache通过/etc/mime.types识别文件所属mime类型,然后根据MIME类型,apache将文件交给对应的程序进行处理。
  • apache或者通过/etc/apache2/mods-enabled/php7.2.conf进行文件匹配,用SetHandler设置请求处理程序。
    如上图,如果(php|php3|php5|php7|pht|phtml)是请求文件的最后一个后缀,则把文件交给php处理器(php_module)来处理,处理完之后把结果返回给apache,再由apache发送给浏览器。

四、漏洞原理

Apache文件解析漏洞设计到一个解析文件的特性:Apache默认一个文件可以有多个以点分割的后缀,当右边的后缀无法识别(不在mime.types内),则继续向左识别。例如,当我们请求这样一个文件:shell.php.xxx.yyy

  • yyy无法被识别,向左;
  • xxx无法被识别,向左;
  • php发现后缀是php,交给php处理这个文件。

如果,apache都不认识,将把文件直接返回给客户端,也就是爆源码。

在web目录下创建一个1.php.aaa的文件,并访问:

可以看到并没有被解析成php,为什么?

因为apache本身并不存在所谓的解析漏洞。让我们回顾解析过程:

  • yyy无法被识别,向左;
  • xxx无法被识别,向左;
  • php发现后缀是php,交给php解释器处理这个文件。

最后这一步虽然交给php解释器来处理这个文件,但是php解释器也不认识.aaa的后缀,所以就直接输出了。

其实,解析漏洞的产生,是由于运维人员在配置服务器时,为了使apapche服务器能解析php,而自己添加了一个handler,例如:AddHandler application/x-httpd-php .php。它的作用是为了让apache把文件交给php_module解析,就是说在文件名的任何位置匹配到php后缀,apache都会让pap_module去解析。

添加一个handler之后,访问1.php.xxx.yyy的解析流程是这样:

  • yyy无法被识别,向左;
  • xxx无法被识别,向左;
  • php激活php处理器,执行php代码。

解析漏洞就产生了。

五、修复方法

  1. 不要使用AddHandle,改成SetHandler,写好正则,就不会有解析问题。
  2. 禁止.php.这样的文件执行
相关推荐
小技工丨16 小时前
【01】Apache Flink 2025年技术现状与发展趋势
大数据·flink·apache
byte轻骑兵17 小时前
2025时序数据库选型指南:从大数据视角看Apache IoTDB的核心优势
大数据·apache·时序数据库
鸠摩智首席音效师18 小时前
如何在 CentOS 上设置 Apache Worker MPM ?
linux·centos·apache
x3c18 小时前
Apache Tika XXE注入漏洞(CVE-2025-66516)
apache·cve
小技工丨18 小时前
【02】Apache Flink 物化表与流批一体处理
大数据·flink·apache
羑悻的小杀马特18 小时前
破局IoT与大数据协同难题!Apache IoTDB用硬核性能打底、强生态护航,成行业新宠!
大数据·物联网·ai·apache·iotdb
Pocker_Spades_A18 小时前
时序数据库选型指南:用工程视角理解 Apache IoTDB
数据库·apache·时序数据库·iotdb
李昊哲小课1 天前
Apache Shiro 教程
apache·shiro
java_logo2 天前
Transmission Docker 容器化部署指南
运维·docker·容器·kubernetes·apache·rocketmq·transmission
veteranJayBrother2 天前
适配小程序的下滑上滑播放视频组件
小程序·apache·音视频