中间件解析漏洞及Apache解析漏洞原理和复现

Apache漏洞

Apache HTTPD 多后缀解析漏洞

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立 一个处理请求的子进程或线程的池。

漏洞原理

apache httpd支持一个文件有多个后缀,如:shell.php.doc 。在windows下,会直接根据最后的.来进 行分隔,将其判定为doc文件,但在apache中可不是这样的,apache会从后往前依次进行判别,遇到不 认识的后缀,便会往前读,如果还是不认识再往前,若是到最后一个都不认识,则会将该文件当成默认 类型文件读取。

apache可以识别的后缀在/etc/mime.types中(前提是已经安装了apache):

该解析漏洞产生的原因一部分是基于apache的这种特性

还有一大部分原因都是由于开发人员的配置不当构成的,当运维人员在配置文件给.php添加了处理器 时:

复制代码
AddHandler application/x-httpd-php .php

这种情况,多后缀的文件名中只要存在.php后缀,则就会将该文件当做php文件解析。

漏洞复现

这里我们就不自己去搭建apache环境了,大家只要知道apache是用来干什么的就行。

这里我们借助vulhub来进行环境搭建。

官网地址:https://vulhub.org/#/index/

提示:

在安装docker-compose的时候我们用:

pip3 install docker-compose

在安装docker-compose的时候可能会报错,先执行:

pip3 install --upgrade pip

再安装。

下载好vulhub之后,我们进入目录: vulhub/httpd/apache_parsing_vulnerability

然后执行如下命令:

复制代码
docker-compose up -d

注意: 第一次运行的时候会去拉取基础镜像

启动之后查看运行的容器:

复制代码
docker-compose ps

直接访问:就是一个文件上传

在对应的文件夹中存在一个码:

直接访问查看:

说明存在多后缀解析漏洞。

我们可以查看一下源码:

复制代码
<?php
if (!empty($_FILES)):
$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, ['gif', 'png', 'jpg', 'jpeg'])) {
    die('Unsupported filetype uploaded.');
}
$new_name = __DIR__ . '/uploadfiles/' . $_FILES['file_upload']['name'];
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], $new_name)){
    die('Error uploading file - check destination is writeable.');
}
die('File uploaded successfully: ' . $new_name);
.......

我们发现有白名单校验且没有修改文件名。接下来我们可以构造白名单后缀的文件:shell.php.png进行 上传。

直接上传php文件是不行的。可以考虑直接改后缀或者burp抓包修改。

漏洞防御

该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞

搞清楚漏洞产生的原因,就知道怎么防御了,这个漏洞产生的前提有几点:

  1. apache必须以模块的形式运行,其他形式不行

  2. 在配置文件中存在:AddHandler application/x-httpd-php .php

  3. 没有修改文件名

这3点必须满足,所以防御反着来即可。

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

漏洞原理

在2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,shell.php\x0A将被按照PHP后缀进行解析, 导致绕过一些服务器的安全策略。

漏洞复现

进入vulhub/httpd/CVE-2017-15715

然后执行如下命令:

复制代码
docker-compose build
docker-compose up -d

这个地方需要注意,直接启动会报错:

原因是docker-compose版本太高,我们需要降版本。

安装低版本:

复制代码
pip3 install docker-compose==1.26.2

这样就不会报错了。

直接访问浏览器:

看一下源码:

复制代码
<?php
if(isset($_FILES['file'])) {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {
        exit('bad file');
   }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {
?>

发现只有黑名单。

可以尝试多后缀解析:

貌似上传上去了:

解析来尝试换行解析:

也上传上去了。

直接访问:/shell.php%0a

漏洞防御

我觉得最好的方式换apache版本。

相关推荐
betazhou16 小时前
Apache seatunel配置-数据同步测试(直接把采集数据打印到控制面板) - SQL server
sqlserver·apache·seatunnel
SelectDB技术团队16 小时前
Apache Doris 的时间旅行与快照能力:边界、替代路径与可落地操作
数据库·apache·数据湖·apache doris·数据库选型·多模湖仓
betazhou1 天前
Apache Seatunnel 抽取SQL server实时同步到Oracle(四)
数据库·oracle·apache·sql server·seatunnel
.冰块.2 天前
ELK 日志分析系统实验:部署 Elasticsearch 双节点集群实现 Apache 日志采集与 Kibana 可视化
elk·elasticsearch·apache·日志
愤怒火龙果3 天前
AI攻防 LLM中间件
人工智能·网络安全·中间件
ydjs678899-bot4 天前
您的Next.js中间件匹配器配置可能会跳过您认为它保护的路由
开发语言·javascript·中间件
爱吃辣椒的小豆豆4 天前
Apache 日志轮转触发 SVN 更新异常
svn·apache
2301_32241428045 天前
基于web的校园失物招领管理系统59695-计算机毕设 原创(免费领源码+部署教程+开发环境)
mysql·nginx·php·apache·thinkphp·phpstudy·wampserver
nvd115 天前
深入剖析 Apache Flink 流批双引擎的动态扩缩容架构:机制演进、状态重对齐与生产落地推导
架构·flink·apache
青企通5 天前
传统企业数字化转型的技术路径:从需求建模到小程序 MVP 的落地方法
小程序·php·apache