前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探究apache解析漏洞

探究apache解析漏洞

作者头像
用户5878089
发布2019-07-23 10:49:01
1.5K0
发布2019-07-23 10:49:01
举报

前言

今天看到了一些关于apache 解析漏洞的文章,下面做一下梳理和测试。大牛别喷我。

每次遇到文件上传,关于apache+PHP 的服务器,都会测试一下服务器的解析漏洞。更多的时候,我们只是知道更改一个文件名例如这样,

代码语言:javascript
复制
11.php.xxx

有可能被解析, 我们先不讨论文件上传的一些姿势,这里只讨论apache解析漏洞的成因。

测试

前一阶段的时候出现了新的php的解析漏洞cve-2017-15715这个漏洞的的成因是%0a 可以绕过最新的php对文件名的匹配:即以.php结尾,但是问题是apache漏洞出现的原因就是apache解析文件的规则是从右到左,如果不可识别就继续往左,正则匹配以.php 结尾依然是有些顾此失彼了。

测试的环境是linux+Apache/2.4.10+php5.5.38搭建方式如下:

代码语言:javascript
复制
1docker run -d -p 8080:80 --name apache php:5.5-apache

首先测试一下那个cve直接输入如下命令:

代码语言:javascript
复制
1root@40a7e092f116:/var/www/html/1# touch '1.php
2> '
3root@40a7e092f116:/var/www/html/1# echo "<?php phpinfo();?>" >'1.php
4'
5root@40a7e092f116:/var/www/html/1# cat '1.php
6'
7<?php phpinfo();?>
8root@40a7e092f116:/var/www/html/1# 
9

这里要说明的是,创建1.php%0a 的方式是输入1.php之后然后换行 然后访问url+1.php%0A 发现可以正常解析

查看配置文件发现

代码语言:javascript
复制
1<FilesMatch \.php$>
2    SetHandler application/x-httpd-php
3</FilesMatch>

这个正则可以通过%0a绕过, 同样也能通过直接创建.php 文件来绕过。

在我的的kail环境里,配置文件是这样写的

代码语言:javascript
复制
 1oot@kali:/etc/apache2/mods-enabled# cat /etc/apache2/mods-enabled/php7.3.conf 
 2<FilesMatch ".+\.ph(ar|p|tml)$">
 3    SetHandler application/x-httpd-php
 4</FilesMatch>
 5<FilesMatch ".+\.phps$">
 6    SetHandler application/x-httpd-php-source
 7    # Deny access to raw php sources by default
 8    # To re-enable it's recommended to enable access to the files
 9    # only in specific virtual host or directory
10    Require all denied
11</FilesMatch>
12# Deny access to files without filename (e.g. '.php')
13<FilesMatch "^\.ph(ar|p|ps|tml)$">
14    Require all denied
15</FilesMatch>
16
17# Running PHP scripts in user directories is disabled by default
18# 
19# To re-enable PHP in user directories comment the following lines
20# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
21# prevents .htaccess files from disabling it.
22<IfModule mod_userdir.c>
23    <Directory /home/*/public_html>
24        php_admin_flag engine Off
25    </Directory>
26</IfModule>

测试一下

代码语言:javascript
复制
 1root@kali:/var/www/html/pub# echo "<?php phpinfo();?>" >'1.php
 2> '
 3root@kali:/var/www/html/pub# ls -al
 4total 12
 5dr-xr-xr-x 2 nobody nogroup 4096 May 14 10:20  .
 6drwxrwxrwx 3 root   root    4096 May 14 07:58  ..
 7-rw-r--r-- 1 root   root      19 May 14 10:20 '1.php'$'\n'
 8root@kali:/var/www/html/pub# curl http://127.0.0.1/pub/1.php%0A
 9<?php phpinfo();?>
10root@kali:/var/www/html/pub# 
11

发现已经不解析了。

创建.php 禁止访问原因如下

代码语言:javascript
复制
1<FilesMatch "^\.ph(ar|p|ps|tml)$">
2    Require all denied
3</FilesMatch>

简要再说一下其他的解析漏洞,apache配置文件的一些基础语法如下

代码语言:javascript
复制
1AddHandler:将文件扩展名映射到指定的处理程序
2如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
3
4AddType:将给定的文件扩展名映射到指定的内容类型
5如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以php 方式执行。

测试命令如下:

代码语言:javascript
复制
1root@kali:/etc/apache2/conf-enabled# echo "AddType application/x-httpd-php .jpg" > test.conf
2root@kali:/etc/apache2/conf-enabled# service apache2 reload

访问,发现可以jpg文件当作php解析了。

其实这也是php通过上传.htaccess绕过解析的限制的方法。

总结

apache漏洞主要形成于网站的配置文件,如果配置不当,很有可能出现解析漏洞,如下是存在的主要原因:

  • Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。
  • AddType application/x-httpd-php .jpg 有可能导致解漏洞
  • AddHandler 也有可能导致解析漏洞

防止绕过解析漏洞的方式:

  • 开启重写模块
  • 可以在mime.types文件里面定义常用的一些扩展名
  • 上传文件强制改名

参考

利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单

代码语言:javascript
复制
1https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html

Apache解析漏洞

代码语言:javascript
复制
1https://www.jianshu.com/p/3cf34c60a6e8

Apache HTTPD 多后缀解析漏洞

代码语言:javascript
复制
1https://github.com/vulhub/vulhub/tree/master/httpd/apache_parsing_vulnerability
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无级安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 测试
  • 总结
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档