文章目录
一. 漏洞描述
二. 漏洞原理
三. 实验环境
- apache版本
- 在网站根目录我们建一个index.php,测试是否解析
- 修改文件名测试
- 用文件名不包含php的文件测试
- 漏洞怎么使用?
四. 如何解决
一. 漏洞描述
Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析成php文件,利用Apache httpd这个特性,就可以绕过上传文件的白名单。
该漏洞和apache版本和php版本无关,属于用户配置不当造成的解析漏洞,尤其是使用module模式与php结合的所有版本
apache支持php有多种模式,常见的有module、cgi、fastcgi等,此漏洞存在于module模式
二. 漏洞原理
由于管理员的错误配置, AddHandler application/x-httpd-php .php,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
三. 实验环境
1. apache版本
[root@gaosh-1 modules]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built: Jun 19 2018 15:45:13
[root@gaosh-1 modules]#
2. 在网站根目录我们建一个index.php,测试是否解析
[root@gaosh-1 html]# cat index.php
<?php
phpinfo();
?>
我们在网页端执行,看看会不会被解析:
解析成功,apache调用了模块进行了解析
3. 修改文件名测试
接着我们来改一下文件名字L:把index.php 改为index.php.aaa
[root@gaosh-1 html]# mv index.php index.php.aaa
测试:
还是可以解析,证明不管php是不是在最后面,哪怕在中间,也能被解析
4. 用文件名不包含php的文件测试
我们再次修改文件名,这次不要出现php
[root@gaosh-1 html]# mv index.php.aaa index.aaa
从这里可以看到,虽然还是php代码,但是文件名没有出现php,这个文件就被当作txt文件来处理了。
在apache与php的结合的网站中,php处理的是.php文件的解析,而apache只负责解析和接受http的请求,Php将.php文件解释执行完毕后,将生成的HTML代码发送给apache,再由 apache将HTML代码发送给客户端。
5. 漏洞怎么使用?
一般的网站可以上传图片,我们把图片的名字命名为 gaosh.php.jpg, 文件名的内容写php代码,然后上传,网站管理人员以为是jpg图片,事实上我们写的是php代码。
四. 如何解决
在apache配置文件里写正则 FileMatch
在httpd.conf的文件最后添加:
<FilesMatch ".(php.|php3.|php4.|php5.)">
Order Deny,Allow
Deny from all
</FilesMatch>
[root@gaosh-1 html]# service httpd restart
测试:
本文转自 ID: 互联网老辛 更多内容关注公众号《极客运维之家》,扫码添加: