Apache HTTPD 多后缀解析漏洞

漏洞描述

httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。

该漏洞并不是apache程序本身的问题,而是管理员配置不当造成。
 

漏洞环境

运行如下命令启动一个稳定版Apache,并附带PHP 7.3环境:

docker-compose up -d

漏洞原理

 Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如,如下配置文件:

AddType text/html .html
AddLanguage zh-CN .cn

其给.html后缀增加了media-type,值为text/html;给.cn后缀增加了语言,值为zh-CN。此时,如果用户请求文件index.cn.html,这两个后缀都会生效,他将返回一个中文的html页面。

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

text/html: HTML格式

text/plain:纯文本格式

image/gif:gif图片格式

application/pdf:pdf格式

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

以上就是Apache多后缀的特性。如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

漏洞复现

docker搭建漏洞环境

Apache HTTPD 多后缀解析漏洞_第1张图片

查看ip地址

Apache HTTPD 多后缀解析漏洞_第2张图片 查看配置文件,发现配置文件中存在AddHandler application/x-httpd-php .php,文件名只要有.php的后缀就会当成php文件执行

Apache HTTPD 多后缀解析漏洞_第3张图片

查看源代码

Apache HTTPD 多后缀解析漏洞_第4张图片

发现对文件后缀名设置了白名单检测,只能上传这几种类型的文件。 

访问http://192.168.2.16

Apache HTTPD 多后缀解析漏洞_第5张图片 

构造写有php代码的图片level2.png 

Apache HTTPD 多后缀解析漏洞_第6张图片

上传level2.png,抓包修改文件名为level2.php.png

Apache HTTPD 多后缀解析漏洞_第7张图片

拿到文件上传路径

 Apache HTTPD 多后缀解析漏洞_第8张图片

访问文件level2.php.png,http://192.168.2.16//uploadfiles/level2.php.png

Apache HTTPD 多后缀解析漏洞_第9张图片

漏洞防御

1、将AddHandler application/x-httpd-php.php的配置文件删除。

2、将AddHandler application/x-httpd-php.php改为AddHandler application/x-httpd-php (.php)$。

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

你可能感兴趣的:(漏洞复现,apache,安全)