24、文件上传漏洞——Apache文件解析漏洞
文章目录
- 一、环境简介
- 一、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代码。
解析漏洞就产生了。

五、修复方法
- 不要使用AddHandle,改成SetHandler,写好正则,就不会有解析问题。

- 禁止
.php.这样的文件执行

相关文章:
24、文件上传漏洞——Apache文件解析漏洞
文章目录 一、环境简介一、Apache与php三种结合方法二、Apache解析文件的方法三、Apache解析php的方法四、漏洞原理五、修复方法 一、环境简介 Apache文件解析漏洞与用户配置有密切关系。严格来说,属于用户配置问题,这里使用ubantu的docker来复现漏洞&am…...
使用Go快速开发TCP公共服务
使用Go快速开发TCP公共服务 文章目录 使用Go快速开发TCP公共服务一、前言二、实现思路三、源码四、测试使用五、最后 一、前言 之前使用的公共TCP服务无法使用了,想了一下整个实现原理不是很复杂,就利用Go快速开发了一个,利用公网服务器可以…...
QEMU环境调试方法
目录 1.如何查看makefile构建过程执行的命令? 2.如何使用GCC生成C程序的宏展开文件? 3.如何在qemu中执行特定的可执行程序? 4.如何在qemu中直接运行可执行程序? 5.如何在qemu中调试某个可执行程序? 本文从调试的角…...
京东数据运营(京东API接口):10月投影仪店铺数据分析
鲸参谋监测的京东平台10月份投影仪市场销售数据已出炉! 10月份,环同比来看,投影仪市场销售均上涨。鲸参谋数据显示,今年10月,京东平台投影仪的销量为16万,环比增长约22%,同比增长约8%࿱…...
Aloha 机械臂的学习记录2——AWE:AWE + ACT
继续下一个阶段: Train policy python act/imitate_episodes.py \ --task_name [TASK] \ --ckpt_dir data/outputs/act_ckpt/[TASK]_waypoint \ --policy_class ACT --kl_weight 10 --chunk_size 50 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 \ --n…...
Spring Boot 项目的创建、配置文件、日志
文章目录 Spring Boot 优点创建 Spring Boot 项目创建项目认识目录网页创建(了解) 约定大于配置Spring Boot 配置文件配置文件格式读取配置项properties 配置文件yml 配置文件基本语法进阶语法配置对象配置集合yml 设置不同环境的配置文件 Spring Boot 日…...
MySQL:drop、delete与truncate区别
一、用法不同 1、drop(丢弃数据): drop table 表名 ,直接将表都删除掉,在删除表的时候使用。 2、truncate (清空数据) : truncate table 表名 ,只删除表中的数据,再插入数据的时候自增长 id 又从 1 开始,在清空表中数…...
2024年顶级的9个 Android 数据恢复工具(免费和付费)
不同的事情可能会损坏您的Android手机并导致您丢失数据。但大多数时候,您可以使用取证工具恢复部分或全部文件。 问题可能来自手机的物理损坏、磁盘的逻辑故障、完整的系统擦除,或者只是简单的粗心大意。 但是,无论数据丢失的原因是什么&am…...
c# Aspose.Cells 导出Excel表格 使用随记
/// <summary>/// 导出Excel表格/// </summary>/// <param name"list">数据集合</param>/// <param name"header">数据表头</param>/// <param name"sumColumn">求和列</param>/// <param n…...
SAP UI5 walkthrough step3 Controls
在上一步,我们是直接用index.html 中的body 里面的DIVision去输出 hello world, 在这个章节,我们将用SAP UI5 的标准控件 sap/m/Text 首先,我们去修改 webapp/index.html <!DOCTYPE html> <html> <head><…...
【分布式微服务专题】从单体到分布式(一、SpringCloud项目初步升级)
目录 前言阅读对象阅读导航前置知识笔记正文一、单体服务介绍二、服务拆分三、分布式微服务升级前的思考3.1 关于SpringBoot/SpringCloud的思考【有点门槛】 四、SpringCloud升级整合4.1 新建父子项目 学习总结感谢 前言 从本节课开始,我将自己手写一个基于SpringC…...
python安装与工具PyCharm
摘要: 周末闲来无事学习一下python!不是你菜鸡,只不过是对手太强了!所以你要不断努力,去追求更高的未来!下面先了解python与环境的安装与工具的配置! python安装: 官网 进入官网下载…...
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK将相机图像高速保存到电脑内存(C#) Baumer工业相机Baumer工业相机图像保存到电脑内存的技术背景代码分析注册SDK回调函数BufferEvent声明可以存储相机图像的内存序列和名称在图像回调函数中将图像保存在内存序…...
iOS 防截屏方法(一)
利用UITextField的安全输入secureTextEntry来实现防截屏效果,上代码: // 将 textField 添加到父视图UITextField *textField [[UITextField alloc] init];textField.backgroundColor [UIColor whiteColor];textField.secureTextEntry YES;[self.view …...
【SpringBoot篇】5种类型参数传递json数据传参的操作
🎊专栏【SpringBoot】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺普通参数🌺POJO参数🌺嵌套…...
Mac系统升级node.js版本和npm版本
升级node.js版本 第一步:查询当前node.js版本 node -v 第二步:清除node.js的缓存 sudo npm cache clean -f 第三步:验证缓存是否清空 npm cache verify 第四步:安装n工具,n工具是专门用于管理node.js版本的工具…...
风力发电对讲 IP语音对讲终端IP安防一键呼叫对讲 医院对讲终端SV-6005网络音频终端
风力发电对讲 IP语音对讲终端IP安防一键呼叫对讲 医院对讲终端SV-6005网络音频终端 目 录 1、产品规格 2、接口使用 2.1、侧面接口功能 2.2、背面接口功能 2.3、面板接口功能 3、功能使用 1、产品规格 输入电源: 12V~24V的直流电源 网络接口&am…...
智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蜉蝣算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蜉蝣算法4.实验参数设定5.算法结果6.参考文献7.MA…...
pymysql报错: unable to rollback、Already closed
参考: https://www.coder.work/article/4516746 https://www.cnblogs.com/leijiangtao/p/11882107.html https://stackoverflow.com/questions/55116007/pymysql-query-unable-to-rollback unable to rollback处理: # 关闭光标对象 cursor.close() # 关…...
[Linux] Web基础知识与http协议
一、HTML 1.1 HTML 的概念 HTML被称为超文本标记语言。 它是规范和标准. 它通过标记符号来标记网页中出现的各个部分。网页文件本身就是一种文本文件。 通过向文本文件添加标记,您可以告诉浏览器如何显示其中的内容。 HTML命令可以描述文本、图形、动画、声音、表格…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
