文章目录
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文件,将配置文件修改为(一般默认配置是不允许目录遍历的):