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

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

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

一、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

如果采用这种配置方式,那么一个文件只要包含“.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

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远是少年啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值