当前位置: 代码迷 >> 综合 >> Apache Httpd换行解析漏洞复现(CVE-2017-15715)
  详细解决方案

Apache Httpd换行解析漏洞复现(CVE-2017-15715)

热度:116   发布时间:2023-10-16 10:06:21.0

漏洞简介

漏洞编号:

CVE-2017-15715

漏洞详情:

Apache httpd是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

漏洞影响范围:

Apache httpd 2.4.0~2.4.29

漏洞原理:

在httpd2.4.0~2.4.29版本中有如下配置

<FilesMatch \.php$>SetHandler application/x-httpd-php
</FilesMatch>

这是httpd解析php文件的表达式,关键在于表达式结尾的$字符,这个字符在正则表达式中用于匹配字符串结尾的位置,同时也会匹配换行符号。

由于是黑名单匹配,所以我们的上传可以成功,并且在解析时会匹配换行符,我们访问时在php后加上%0a即可正常访问。

但是在使用中大部分情况下是$_FILES[‘file’][‘name’]作为文件名,这样会自动过滤换行符,所以这个漏洞更多的是一个思路,实战中用到的并不多,这里复现漏洞,就采用了$_POST[‘name’]来作为文件名。

漏洞复现

环境搭建:

安装docker
1.    curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
2.    yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
3.    yum install docker-ce
4.    systemctl start docker
更换镜像的下载源
vi /etc/docker/daemon.json

直接替换里面的内容为:
{
“registry-mirrors”: [“https://xxxxx.mirrors.aliyun.com”]
}
网址在阿里云容器镜像服务获取:
https://www.aliyun.com/product/acr?spm=a2c4g.11174283.2.1.625e4541j1IFor
Apache Httpd换行解析漏洞复现(CVE-2017-15715)

重启docker服务:

systemctl daemon-reload
systemctl restart docker

测试docker服务是否正常:

docker pull busybox
docker run busybox echo “hello world” 

输出hello world即docker正常运行。

部署漏洞所需环境:

复现漏洞可以直接使用vulhub上的docker镜像
项目可以下载至任意目录下,我这里在root目录下

git clone https://github.com/vulhub/vulhub

进入项目需要复现的漏洞编号下

cd vulhub/vulhub-master/httpd/CVE-2017-15715

把我们需要的项目起来

docker-compose up -d

此命令需要python环境,还需要再单独下载

yum install -y python38
可能yum源里没有python38,也可以装其他版本,可以执行get-pip.py文件即可
wget https://bootstrap.pypa.io/get-pip.py
sudo  python3 get-pip.py
pip -version
pip install docker-compose

环境搭建完成,测试docker运行情况,查看映射端口:

docker ps

Apache Httpd换行解析漏洞复现(CVE-2017-15715)我这里的8080端口被占用了,所以换了7999端口,默认的是docker的80端口映射到虚拟机ip的8080端口。
攻击机浏览器打开http://your-ip:8080(我这里是7999),查看环境搭建是否成功。
Apache Httpd换行解析漏洞复现(CVE-2017-15715)环境搭建成功!

漏洞验证:

一.准备phpinfo文件,内容为

<?php
phpinfo();
?>

命名为a.php
二.选择a.php文件上传,用burpsuit抓包
Apache Httpd换行解析漏洞复现(CVE-2017-15715)在文件名a.phpHEX的后面加上0a,然后发包,即可绕过黑名单上传成功。Apache Httpd换行解析漏洞复现(CVE-2017-15715)

查看一下文件已经上传成功了
Apache Httpd换行解析漏洞复现(CVE-2017-15715)

三.我们访问这个文件,在文件名后缀加上换行符%0a,验证是否存在解析漏洞。
Apache Httpd换行解析漏洞复现(CVE-2017-15715)可以看到已经解析了这个文件,漏洞复现成功。

漏洞修复意见:

这个漏洞还是比较鸡肋的,只要使用了$_FILES[‘file’][‘name’]来获取文件名,就会自动去掉换行符,也就过不了黑名单了,我们主要学习这里的思路。

  相关解决方案