Apache HTTPD 多后缀名解析漏洞复现

news/2024/12/22 20:26:09/

什么是多后缀名解析漏洞加粗样式:
多后缀名解析漏洞(Multiple Extension Handling Vulnerability)指的是一种安全漏洞,发生在某些操作系统或网络服务中的文件扩展名处理机制中。

这种漏洞的本质是当文件具有多个后缀名(例如file.txt.php)时,系统或服务可能会错误地解析文件的类型和处理方式。攻击者可以利用这个漏洞来绕过安全检查,欺骗系统或服务执行不应该执行的操作。

漏洞环境

说明:

​ apahe解析文件时候有一特性,Apache默认一个文件可以有多个以点分割的后缀,apache会从最右边开始识别其后缀名,如遇无法识别的后缀名则依次往左进行识别
​ 如果运维人员给.php后缀的文件添加了处理程序 AddHandler application/x-httpd-php .php 那么在有多个后缀的情况下,只要文件含有.php后缀那么该文件就会被识别为PHP文件进行解析。
​ 该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞。

​ Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:

AddType text/html .html
AddLanguage zh-CN .cn

​ 其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,他将返回一个中文的html页面。

以上就是Apache多后缀的特性。如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

​ 那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

漏洞环境

运行如下命令启动一个稳定版Apache,并附带PHP 7.3环境:

sudo docker-compose up -d

image-20230907175823886

查看使用的端口:

sudo docker ps -a

image-20230907180037377

访问80端口,页面:

image-20230907180114403

漏洞复现

​ 环境运行后,访问http://your-ip/uploadfiles/apache.php.jpeg即可发现,phpinfo被执行了,该文件被解析为php脚本。

image-20230907192238999

http://your-ip/index.php中是一个白名单检查文件后缀的上传组件,上传完成后并未重命名。我们可以通过上传文件名为xxx.php.jpgxxx.php.jpeg的文件,利用Apache解析漏洞进行getshell。

我们上传一个php木马文件试一下:

image-20230907192646051

我们把文件类型改为info.php.png ,然后上传:

image-20230907193048624

显示文件上传成功。

访问一下文件:

image-20230907193245272

发现php代码执行了。

为什么php代码会执行呢,其实是因为由安全配置引起的。

cat docker-compose.yml

image-20230907193605156

volumes表示卷,卷和磁盘有关,它会把./www 目录映射到/var/www/html 目录,下面的也是如此,就是把左边是物理机中的文件和右边是docker容器中的文件做了映射。所以我们要看配置文件话,直接看映射的文件就可以,配置文件在conf目录下:

cat conf/docker-php.conf

image-20230907194807905

其中AddHandler application/x-httpd-php .php 就是不安全的配置。如果运维人员给.php后缀的文件添加了处理程序 AddHandler application/x-httpd-php .php 那么在有多个后缀的情况下,只要文件含有.php后缀那么该文件就会被识别为PHP文件进行解析。


http://www.ppmy.cn/news/1103427.html

相关文章

OLED透明屏触控:引领未来科技革命的创新力量

OLED透明屏触控技术作为一项颠覆性的创新,正在引领新一轮科技革命。它将OLED显示技术与触摸技术相结合,实现了透明度和触控功能的完美融合。 在这篇文章中,尼伽将通过引用最新的市场数据、报告和行业动态,详细介绍OLED透明屏触控…

【实践篇】Redis最强Java客户端Redisson

文章目录 1. 前言2. Redisson基础概念2.1 数据结构和并发工具2.1.1 对Redis原生数据类型的封装和使用2.1.2 分布式锁实现和应用2.1.3 分布式集合使用方法 2.2 Redisson的高级特性2.2.1 分布式对象实现和使用2.2.2 分布式消息队列实现和使用2.2.3 分布式计数器实现和使用 3. 参考…

反编译小程序详细教程,处理各种异常报错

文章目录 一、准备工作 (一)安装Nodejs (二)解密和逆向工具 二、小程序缓存文件解密 (一)定位小程序缓存路径 (二)源码解密 (三)源码反编译 三、小结 四、异常…

超级等级福利礼包

文章目录 一、 介绍二、 设计等级礼包的目的1. 提升游戏玩家活跃度2. 提升游戏用户吸引力3. 提高游戏用户留存率4. 实现间接收入5. 持续营收 三、 玩家心理总结四、总结该模式的赢利点五、 该模式的应用场景举例 一、 介绍 超级等级福利礼包,玩家每升级5级即可获得…

Brief. Bioinformatics2021 | sAMP-PFPDeep+:利用三种不同的序列编码和深度神经网络预测短抗菌肽

文章标题:sAMP-PFPDeep: Improving accuracy of short antimicrobial peptides prediction using three different sequence encodings and deep neural networks 代码:https://github.com/WaqarHusain/sAMP-PFPDeep 一、问题 短抗菌肽(sAMPs)&#x…

lv4 嵌入式开发-6 格式化输入输出

目录 1 标准I/O – 格式化输出 2 标准I/O – 格式化输入 3 小结 4 标准I/O – 思考和练习 1 标准I/O – 格式化输出 #include <stdio.h> int printf(const char *fmt, …); int fprintf(FILE *stream, const char *fmt, …); int sprintf(char *s, const char *f…

基于Jetty9的Geoserver配置https证书

1.环境准备 由于Geoserver自带的jetty版本不具备https模块&#xff0c;所以需要下载完整版本jetty。这里需要先查看本地geoserver对应的jetty版本&#xff0c;进入geoserver安装目录&#xff0c;执行如下命令。 java -jar start.jar --version Jetty Server Classpath: -----…

7、Spring之依赖注入源码解析(下)

resolveDependency()实现 该方法表示,传入一个依赖描述(DependencyDescriptor),该方法会根据该依赖描述从BeanFactory中找出对应的唯一的一个Bean对象。 @Nullable Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName,@Null…