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.这样的文件执行
相关推荐
程序猿小D21 小时前
第25节 Node.js 断言测试
后端·node.js·log4j·编辑器·vim·apache·restful
RR13351 天前
图标统计页面的设计与控件 Apache echarts
前端·apache·echarts
tcoding2 天前
《基于Apache Flink的流处理》笔记
笔记·flink·apache
ALLSectorSorft3 天前
上门服务小程序会员系统框架设计
小程序·apache
杨过姑父3 天前
部署开源版禅道,修改apache端口无效解决
bug·apache·软件工程·issue
酷爱码3 天前
Spring Boot 整合 Apache Flink 的详细过程
spring boot·flink·apache
黑客老李4 天前
JavaSec | SpringAOP 链学习分析
java·运维·服务器·开发语言·学习·apache·memcached
临水逸4 天前
可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana
apache·grafana
SelectDB技术团队4 天前
Apache Doris + MCP:Agent 时代的实时数据分析底座
人工智能·数据挖掘·数据分析·apache·mcp