中间件解析漏洞及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版本。

相关推荐
莫爷8 小时前
JSON 性能优化实战:大数据量 JSON 的处理技巧
性能优化·json·apache
D愿你归来仍是少年9 小时前
Flink 并行度变更时 RocksDB 状态迁移的关键机制与原理
大数据·flink·apache
User_芊芊君子16 小时前
大数据时代时序数据库选型指南:Apache IoTDB技术解析与实践建议
大数据·apache·时序数据库
SeaTunnel17 小时前
Apache SeaTunnel 提速不难,JVM 参数这样调
jvm·apache
小马爱打代码17 小时前
Apache HttpClient 核心设计模式详解
设计模式·apache
想你依然心痛18 小时前
大数据时代时序数据库选型指南:Apache IoTDB 如何成为工业物联网的“数据底座“
大数据·apache·时序数据库
onlywhz18 小时前
【Golang】——Gin 框架中间件详解:从基础到实战
中间件·golang·gin
cjy0001112 天前
【AimRT】现代机器人通信中间件 AimRT
中间件·机器人
一叶飘零_sweeeet2 天前
中间件:高可用、高性能、可扩展三大核心设计原则
中间件·架构·kafka
钛态2 天前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos