Apache漏洞—多后缀名解析、目录遍历和(CVE-2017-15715)

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

一、Apache httpd 多后缀解析漏洞

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

漏洞原理

apache httpd支持一个文件有多个后缀,如:test1.php.pdf 。在windows下,会直接根据最后的.来进行分隔,将其判定为pdf文件,但在apache中可不是这样的,apache会从后往前依次进行判别,遇到不认识的后缀,便会往前读,如果还是不认识再往前,若是到最后一个都不认识,则会将该文件当成默认类型文件读取。
那么有人要问了,我怎么知道它认识哪些不认识哪些呢?在/etc下有个mime.types文件定义了apache可以识别的文件后缀。以下是该文件部分内容:
在这里插入图片描述
该解析漏洞产生的原因一部分是基于apache的这种特性,还有一大部分原因都是由于开发人员的配置不当构成的,当运维人员在配置文件给.php添加了处理器时:

AddHandler application/x-httpd-php .php

多后缀的文件名中只要存在.php后缀,则就会将该文件当做php文件解析。

漏洞复现

运行环境:vulhub中的apache_parsing_vulnerblity

使用docker-compose up -d 命令运行容器,在本地的80端口运行,发现是文件上传,于是我们查看源代码:
在这里插入图片描述
查看源代码发现,这里是对文件的后缀名设置了白名单,只能上传这几种类型的文件。接下来我们去查看配置文件:
在这里插入图片描述
配置文件中有这么一句,也就是对.php添加了处理器,当多后缀名中有.php时,将其当做php文件解析。所以我们接下来构造payload来绕过过滤:
payload:

http://127.0.0.1:80/test1.php.jpg

其响应如下:
在这里插入图片描述
文件上传成功,而且没有重命名,于是我们直接去该路径下运行该文件即可:
在这里插入图片描述
phpinfo执行成功,利用该漏洞即可get shell。

漏洞修复

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

二、Apache httpd 换行解析漏洞(CVE-2017-15715)

影响版本:
2.4.0~2.4.29

漏洞原理

此漏洞的出现是由于apache在修复第一个后缀名解析漏洞时,用正则来匹配后缀。在解析php时xxx.php\x0A将被按照php后缀进行解析,导致绕过一些服务器的安全策略。

漏洞复现

运行vulhub中CVE-2017-15715(该环境中需要自己添加前端代码),然后查看代码:
在这里插入图片描述
这里在上传文件时,对文件名进行了黑名单限制,我们利用该漏洞上传一个1.php文件,使用burpsuit抓包。
在这里插入图片描述
在1.php后插入一个\x0A,绕过黑名单过滤。
在这里插入图片描述
访问1.php%0A,即可看到文件被当做php解析。

漏洞修复

1、该漏洞仅针对于apache的2.4.0~2.4.29版本,升级apache版本即可避过该漏洞。
2、获取文件名时使用$_FILES[‘file’][‘name’]会自动把换行符去掉,防止出现该解析漏洞。(参考离别歌:https://www.colabug.com/2579930.html)

三、Apache 目录遍历

漏洞原理

Apahce中httpd.conf配置错误导致
在这里插入图片描述

漏洞修复

1、phpstudy中

在httpd.conf文件中找到

Options +Indexes +FollowSymLinks +ExecCGI 

将其修改并重启phpstudy

Options -Indexes+FollowSymLinks +ExecCGI

参考文章:https://blog.csdn.net/skystephens/article/details/86611796
2、kali中:
找到apache2的apache2.conf文件,将配置文件修改为(一般默认配置是不允许目录遍历的):
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37711941/article/details/88684515