影响版本
2.4.0~2.4.29都有可能存在该漏洞
原理分析
进入容器
docker exec -it 容器ID /bin/bash
该程序是采用黑名单的形式,如果文件后缀名不在名单内即可上传,所以 a.php\x0A
不在黑名单列表中,可以上传。但是x0A
是换行符,所以apache会直接忽略,将其当成php来执行。
漏洞复现
编译环境
该环境使用vulhub搭建,该漏洞路径为 vulhub/httpd/CVE-2017-15715
。进入该漏洞路径后执行以下命令
docker-compose up -d
运行环境
docker-compose up -d
启动容器后执行以下命令查看容器ID。
docker ps

进入环境
docker exec -it 容器ID /bin/bash
查看IP
cat /etc/hosts
上传一个名为1.php的文件,被拦截
在1.php后面插入一个\x0A
(注意,不能是\x0D\x0A
,只能是一个\x0A
),不再拦截
访问刚才上传的/1.php%0a
,发现能够成功解析,但这个文件不是php后缀,说明目标存在解析漏洞:
如果上传文件的php程序是设置的白名单,那么这个漏洞将无法利用。