您当前的位置:首页 > 计算机 > 安全防护

中间件解析漏洞总结

时间:10-10来源:作者:点击数:

这一篇和上一篇文章文件上传漏洞是互为姊妹篇,在利用思路会相互补充。文件上传漏洞的另外一些特殊情况,上传的文件检测严格,只能常规上传图片,但是如果中间存在一些解析漏洞的话我们就可以利用解析漏洞进行上传后门。

Nginx解析漏洞

由此可知,该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。

配置失误之处

cgi.fix_pathinfo

该选项位于配置文件php.ini中,默认值为1,表示开启。例如一个文件:test.png/x.php

当解析这个文件时,如果找不到的话,就会寻找是否存在 test.png。如果存在的话就会以php进行解析。

测试思路:上传后门图片,再房屋访问图片,再尾部加上/x.php即可

复现环境:借助vulhub的docker测试环境

上传恶意图片,并且访问。

加上/x.php

建议不要在图片里面放后门马,建议放一些命令。

漏洞修复建议:

  1. 在php版本比较低时,将php.ini文件中的cgi.fix_pathinfp的值设置为0,即关闭cgi解析
  2. php-fpm.conf中的 security.limit_extensions =.php,即仅支持.php后缀解析

IIS解析漏洞

原理:漏洞原理是在IIS6.0处理PROPFIND指令的时候,由于url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候引发栈溢出

利用条件:

  1. 影响版本:IIS 6-7 7版本的利用方式和上面的nginx是一样的
  2. 上传后文件按路径可以控制

构成解析漏洞的方式:有两种

第一种:文件目录错误解析  
xxx.asp/1.jpg
目录xxx.asp下的所有文件都会以asp进行解析

第二种:文件名错误解析
xxx.asp;.1.jpg
会把这个jpg格式文件按照asp进行解析

这个漏洞的利用还需要考虑一个问题,就是文件路径的问题,后门就是能上传,如果没法链接的话就无法构成文件上传漏洞。

文件上传后的命名规则:

  1. 基于本地的命名,直接方式一利用
  2. 基于时间命名
  3. 基于随机字符命名

这个时候一方面需要知道文件存储的位置,另外一方面需要考虑到文件的名字。当然有的数据包我们也许能看到一个filepath的字段。如果上传路径可控,也是可以的。

Nginx 文件名逻辑漏洞 CVE-2013-4547

原理:正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。但是在这漏洞情况下,当我们上传1.gif后,访问我们上传的文件,但是这样请求1.gif[0x20][0x00].php 就会把这个文件发给fastcgi及解析,但是进行解析却发现解析的是1.gif。

上传图片,包含有后门文件

访问这个url

这个空格的意思进行标记,便于接下来修改

Apache HTTPD 换行解析漏洞(CVE-2017-15715)

漏洞原理:

代码分析

 
#    容器内php配置文件
root@b4104beecaba:/var/www/html# cat /etc/apache2/conf-available/docker-php.conf 
<FilesMatch \.php$>
	SetHandler application/x-httpd-php  

    # 分析:
    # 设置了正则表达式,$可以匹配任意字符,只要文件名里有.php 就会被php解析


</FilesMatch>
 
DirectoryIndex disabled
DirectoryIndex index.php index.html
 
<Directory /var/www/>
	Options -Indexes
	AllowOverride All
</Directory>
root@b4104beecaba:/var/www/html# cat index.php 
<?php
if(isset($_FILES['file'])) {
    $name = basename($_POST['name']);
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {    
        exit('bad file');
    }
    move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);
} else {
 
?>
 
# 这里会对数据包里的name参数进行过滤,php+任意字符就能绕过过滤
# 配合php设置就可以成功实现php文件解析

在php后面加上换行符 0x0a

上传文件

访问文件

Apache HTTPD 多后缀解析漏洞

漏洞原理:Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。如果给php文件解析加上AddHandler application/x-httpd-php .php 那么只要文件名字里面包含.php即可按照php解析。

上传文件:

访问文件:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门