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

news2024/11/16 20:56:40

文章目录

  • 一、环境简介
  • 一、Apache与php三种结合方法
  • 二、Apache解析文件的方法
  • 三、Apache解析php的方法
  • 四、漏洞原理
  • 五、修复方法

一、环境简介

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

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.这样的文件执行
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1299220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL的锁机制

1.简介 MySQL的隔离性是由锁机制来保证的。锁是计算机协调多个进程或线程并发地访问某一资源你的机制。当多线程并发地访问某个数据时,尤其是在涉及金钱等安全敏感性数据的时候,需要保证数据在任意时刻最多只有一个线程可以对其进行修改,从而…

springboot mybatis手动事务

创建springboot项目 搭建最简单的SpringBoot项目-CSDN博客 引入mybatis和数据库依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><…

MacOS环境配置一系列问题的汇总,方便以后自己查看

环境配置一系列问题的汇总&#xff0c;方便以后自己查看 man brew报错“No manual entry for brew” 解决方法记录&#xff1a; 解决问题之前尝试的方法&#xff1a; Linking manuals from Homebrew1 https://apple.stackexchange.com/questions/111061/linking-manuals-f…

虚拟机安装 hyper—v 沙盒

一、下载系统镜像 1、确认电脑内存在8G及以上并提前准备完整的系统镜像 安装Hyper-V并重启电脑后打开程序选择虚拟机 选择安装位置并设置保留第一代的虚拟参数即可开始分配内存&#xff0c;根据自己的需求进行设置 右键虚拟机启动并开始运行&#xff0c;进行镜像系统的安装便完…

力扣 4. 寻找两个正序数组的中位数

题目 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 My class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {i…

科学计算入门

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

04-详解Eureka注册中心的作用,具体配置,服务注册和服务发现

Eureka注册中心的作用 Eureka架构 远程调用的两个问题 服务的ip地址和端口号写死: 生产环境中服务的地址可能会随时发生变化,如果写死每次都需要重新修改代码多实例问题: 在高并发的情况下一个服务可以有多个实例形成一个集群,此时如果采用硬编码的方式只能访问服务的一个实…

【Java+MySQL】前后端连接小白教程

目录 &#x1f36d;【IntelliJ IDEA】操作 &#x1f36d;1. 连接MySQL数据库 &#x1f308;1.1 错误解决 &#x1f36d;2. 操作MySQL数据库 &#x1f308;2.1 双击查看表数据 &#x1f308;2.2 编写SQL脚本 &#x1f36d;【IntelliJ IDEA】 IntelliJ IDEA是由JetBrains公司…

[后端卷前端2]

绑定class 为什么需要样式绑定呢? 因为有些样式我们希望能够动态展示 看下面的例子: <template><div><p :class"{active:modifyFlag}">class样式绑定</p></div> </template><script>export default {name: "goo…

ffprobe命令行超详细使用详解

本文做为阅读ffprobe源码的前课程。为了之后方便理解ffprobe的源码,咱们先从ffprobe的命令学习。 课程内容如下: 文章目录 一、ffprobe主要选项说明1、每次使用ffprobe都打印编译环境的信息,太烦了2、如何分析媒体文件中存在的流信息3、如何指定查询某路流信息4、查看输入文…

蒙特霍尔问题(选择三扇门后的车与羊)及其贝叶斯定理数学解释

1. 蒙特霍尔问题 有一个美国电视游戏节目叫做“Let’s Make a Deal”&#xff0c;游戏中参赛者将面对3扇关闭的门&#xff0c;其中一扇门背后有一辆汽车&#xff0c;另外两扇门后是山羊&#xff0c;参赛者如果能猜中哪一扇门后是汽车&#xff0c;就可以得到它。 通常&#xf…

飞天使-linux操作的一些技巧与知识点2

TCP 的三次握手 第一次&#xff0c;客户端与服务端建立链接&#xff0c;需要发送请求连接的消息 第二次&#xff0c;服务端接口到数据后&#xff0c;返回一个确认的操作*&#xff08;至此客户端和服务端链路建立成功&#xff09; 第三次&#xff0c;服务端还需要发送要与客户端…

【小白专用】Apache2.4+PHP8.3+MYSQL的配置

1.下载PHP和Apache 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.使用Apache作为服务器的话&#xff0c;一定要下载Thread Safe的&#xff0c;否则没有php8apache2_4.dll这个文件&#xff0c; 如果使用IIS的请下载 NON Tread safe的 2.如果…

【报错栏】找不到依赖项

问题描述&#xff1a; 找不到依赖项 org.springframework.boot:spring-boot-starter-amqp:2.7.14 解决办法&#xff1a; 最终我的问题解决

激光打标机在智能手表上的应用:科技与时尚的完美结合

随着科技的飞速发展&#xff0c;智能手表已经成为我们日常生活中不可或缺的智能设备。而在智能手表制造中&#xff0c;激光打标机扮演着至关重要的角色。本文将详细介绍激光打标机在智能手表制造中的应用&#xff0c;以及其带来的优势和影响。 ​ 一、激光打标机在智能手表制…

C语言数组输出平行四边形问题问题

目录 1问题输出以下图形: 2解题思路&#xff1a; 3代码如下&#xff1a; 4运行代码&#xff1a; 注意图形问题就是找到行和列的规律&#xff0c;即可输出&#xff0c;比如我也可以输出反方向的平行四边行&#xff0c;代码如下&#xff1a; 运行结果&#xff1a;​编辑 5总…

Proteus仿真--基于NM24C08的EEPROM仿真设计

本文介绍基于NM24C08的EEPROM仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 其中NM24C08是标准的2线总线接口的串行EEPROM&#xff0c;开机画面在LCD12864上显示 仿真图如下 仿真运行视频 Proteus仿真--基于NM24C08的EEPROM仿真设计 附完整Proteus仿真资料…

LINUX-ROS集成安装MQTT库步骤注意事项

环境信息 roottitan-ubuntu1:/home/mogo/data/jp/paho.mqtt.cpp# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic 步骤 安装doxygen sudo apt install doxygen 构…

基于ssm铁岭河医院医患管理系统论文

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存…

Diffie-Hellman密钥交换协议

DH介绍 Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥&#xff0c;然后可以用这个密钥进行加密和解密。 但是注意&#xff0c;这个密钥交换协议 只能用于密钥的交换&#xff0c;而…