• 文件上传之中间件解析漏洞详解


    今天继续给大家介绍渗透测试相关知识,本文主要内容是文件上传之中间件解析漏洞详解。

    免责声明:
    本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
    再次强调:严禁对未授权设备进行渗透测试!

    一、IIS解析漏洞

    IIS作为一款使用比较广泛的Web应用,在特定的版本中存在一些文件名解析的漏洞。
    1、exp.asp/pzz.jpg
    在5.X——6.X版本的IIS中,存在上述的文件名解析漏洞。即如果一个文件所处在XXX.asp的目录下,那么这个目录下的所有文件都会被当作asp文件来进行解析处理,而不管这个目录下的文件的后缀名是什么。
    2、exp.asp;.jpg
    在5.X——6.X版本的IIS中,还存在如上的解析漏洞,即如果我们上传一个名为XXX.asp;.jpg的文件,那么尽管该文件的真实后缀名为jpg,但是IIS服务器会将该文件当成asp文件来进行处理。
    3、xxx.cer、xxx.asa、xxx.cdx
    在5.X——6.X版本的IIS中,还存在一个问题,即所有以cer、asa以及cdx为后缀名的文件都会被当作asp文件来进行处理,这对于以文件后缀名黑名单作为过滤方式的站点而言,就必须考虑到以上三种特殊的后缀名。
    4、xxx.jpg/xxx.php
    在7——7.5版本的IIS中,如果我们上传一个名为xxx.jpg的文件,但是在访问该文件时,在该文件URL的后面添加xxx.php,那么该文件就会被当作PHP文件来执行。
    5、a.aspx.a;.a.aspx.jpg…jpg
    在7.5版本的IIS中,如果我们上传一个名为a.aspx.a;.a.aspx.jpg…jpg的文件,那么该文件则往往可以突破对文件后缀名的限制,最终转化为一个asp文件来解析。
    在这里插入图片描述

    二、Apache解析漏洞

    同样的,Apache服务器由于其自身程序设计以及常见配置的问题,也容易产生各种各样的文件解析漏洞,常见的Apache解析漏洞主要有以下三种。
    1、文件后缀从右向左判断
    对于低版本Apache服务器而言,其对于文件后缀名的判断,是从右向左进行的,例如,如果我们上传一个名为exp.php.aaa的文件,那么该文件的后缀名为aaa,由于aaa不是一个合法的后缀名(合法的文件名是指mime.types文件中记录的文件名),因此Apache服务器会向该文件的前面寻找是否存在有合法的文件名,接下来找到的文件后缀名为php,php是一个合法的后缀名,因此该文件会被当作php文件来解析。
    2、Apache换行解析漏洞(CVE-2017-15715)
    在2.4.0-2.4.29版本的Apache中,存在着换行解析的漏洞,漏洞编号CVE-2017-15715。
    简单来看,该漏洞的成因是Apache在进行上传文件文件名的提取时,如果文件名的最后存在\n、\r或者是0x0a,那么该\n、\r和0x0a会被当作文件名的一部分被提取出来,这样就可以对文件的后缀名造成污染,从而对文件后缀名的检测造成影响,但是当该文件被保存到本地时,如果目标系统不是Windows操作系统,那么该文件在存储时就会删除该换行符,从而使得我们上传的文件恢复为我们想要的后缀名。
    例如,如果我们上传一个名为1.php0x0a的文件,那么在Apache提取到的文件后缀名为php0x0a,这样可以绕过一些黑名单的检测,而当该文件被保存到本地时,则会被删除掉0x0a,这样该文件就会恢复为原来的1.php。
    3、AddHandler解析漏洞
    这是Apache在进行配置时常出现的因为配置错误所引起的漏洞,Apache服务器本身不能处理PHP,因此如果我们要用Apache来配合PHP,就必须在Apache进行配置,告诉Apache服务器对于PHP这种类型的后缀名文件应该调用什么模块来处理,一种配置方式如下所示:

    AddHandler application/x-httpd-php.php
    
    • 1

    如果采用这种配置方式,那么一个文件只要包含“.php”,那么就会被当作PHP文件来进行处理。例如,如果一个文件名为exp.php.jpg,那么尽管该文件的文件名是jpg,但是Apache服务器依旧会把该文件当成PHP文件来进行解析。
    在这里插入图片描述

    三、Nginx解析漏洞

    Nginx是一款高性能的Web服务器,该Web服务器下也有很多漏洞。
    1、Nginx文件名修理漏洞
    在PHP配置中,cgi.fix_pathinfo如果配置为1,那么Nginx服务器会存在一个文件名修理(漏洞名称是我自己取的)的漏洞。这时如果我们上传一个1.jpg的PHP木马,但是在访问该文件时在该文件的后面添加/xxx.php,即1.jpg/123.php,那么Nginx服务器会将该文件认定是一个PHP类型的文件,但是显然由于该文件不存在,因此Nginx服务器会尝试对该文件的路径进行“修理”,即查找该文件前面的文件。这样自然就找到了1.jpg的文件,从而把1.jpg的文件当作PHP文件来进行解析。之所以该漏洞不存在于Apache,是因为Apache服务器会先验证指定路径是否存在,只有存在了才会交给PHP来处理,而Nginx则会进行路径的修剪,修剪完成后找到了指定的文件直接交给PHP来进行处理,从而触发了漏洞。
    2、Nginx %00漏洞(CVE-2013-4547)
    Nginx %00漏洞,编号CVE-2013-4547影响比较广泛,Nginx 0.8.41-1.4.3,以及1.5.x版本都收到了该漏洞的影响。
    该漏洞的成因是%20%00在Nginx中的解析问题,在这里%20即空格,而%00即16进制的0x00,或\0。如果我们上传一个名为1.jpg%20的文件,那么由于该文件后缀名没有PHP,因此可以上传。但是当我们访问该文件时,访问1.jpg%20%00.php的文件,那么由于后面的php的后缀名,就会把我们上传的1.jpg的文件当作PHP来进行处理。
    在这里插入图片描述
    原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

  • 相关阅读:
    利用GUI实现渲染二维码效果
    【云原生 · Kubernetes】KubeVirt热迁移
    红包雨中:Redis 和 Lua 的邂逅
    推荐系统中deepfm算法的pytorch实现
    ROS SMACH个人学习记录
    PCDN技术如何适应不同用户的需求和偏好?
    一文详解反转二叉树
    ArkTS开发实践
    Windows11安装Maven,配置环境变量
    HCIA 访问控制列表ACL
  • 原文地址:https://blog.csdn.net/weixin_40228200/article/details/127129273