本文共 1437 字,大约阅读时间需要 4 分钟。
目录
漏洞原理
Apache解析原理
apache通过查看mime.types文件来查看是否能够识别上传文件的文件类型。在/etc/mime.types文件中记录了大量的文件后缀和mime类型,当客户端请求一个文件时,如果后缀在该文件中,apache将返回对应的content-type给浏览器。如果不在这个文件中则不会返回content-type给浏览器,而直接文件内容,由浏览器自动处理。
漏洞原理
Apache文件解析漏洞涉及一个解析文件的特性:Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别(不在mime.types内),则继续向左识别。
当我们请求一个文件:1.php.xxx.yyy
yyy -> 无法识别,向左
xxx -> 无法识别,向左
php -> 可以识别,交给php处理该文件
产生原因
Apache本身不存在解析漏洞,漏洞的产生是因为网站管理员在配置服务器是的不当操作产生的。
- 在Apache虽然将1.php.xxx.yyy交给php处理文件,但是php也不认识.xxx.yyy的后缀,所以直接就输出了。但因为在网站管理人员为了使apache服务器能够解析php,而自己添加了一个handler导致了解析漏洞的产生。
复现过程
环境配置
靶机:192.168.111.147(Ubuntu 16.0)
下载相关程序
下载Apache
apt-get install apache2
下载php7.0
apt-get install php7.0
将apache与php以module的方式连接
apt-get install libapache2-mod-php7.0
- Apache和php三种结合方法
- CGI:通常翻译为共同网关接口,是HTTP服务器与机器上的其他程序进行通信的一个接口,让Web服务器必要时启动额外的程序处理动态内容
- FastCGI:CGI解释器的更快实现,可以提供良好的性能、伸缩性、Fail-Over特性等等
- Module:把PGP编译为apache的模块
查看Apache状态
复现漏洞产生原因
创建配置文件
-
进入存放配置文件的文件夹并创建一个1.conf的配置文件
-
AddHandler application/x-httpd-php .php的作用是为了apache把php文件交给php_module解析,但是注意到它与SetHandler:它的后缀不是用正则去匹配的。所以,在文件名的任何位置匹配到php后缀,它都会让php_module解析。
cd /etc/apache2/site-enabled/vim 1.confAddHandler application/x-httpd-php .php
重启Apache服务并查看状态
service apache2 restartservice apache2 status
漏洞验证
进入根目录
cd /var/www/html
在根目录中创建一个1.php.aaa的文件,在浏览器中访问
1.php.aaa被apache以.php文件正常解析,文件解析漏洞复现完成
修复方法
不使用AddHandler改用SetHandler,写好正则匹配,就不会有解析问题。
SetHandler application /x-httpd-php
禁止.php.这样的文件执行
Require all denied
转载地址:https://blog.csdn.net/weixin_53696027/article/details/129244190 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!