当前位置: 首页 > news >正文

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

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

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

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

相关文章:

  • 【每日一好题】这么经典的题你不能不会:矩阵置零
  • JSR223常用函数和对象--Jmeter内置对象Chapter1
  • 从头开始训练神经网络(Unet)
  • Python制作自动填写脚本,100%准确率
  • 半小时了解SQL注入漏洞?(注入方式大全+绕过大全)
  • CSS 几种常见的选择器
  • 【Day17】Java算法刷题 【面试题 01.08. 零矩阵】 【844. 比较含退格的字符串】
  • 【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备
  • 【小程序入门】App函数注册小程序实例
  • 【Linux从0到1】第十七篇:高级IO
  • 一起来做个CH347的项目(应用于FPGA、CPLD、MCU)
  • 特征筛选还在用XGB的Feature Importance?试试Permutation Importance
  • 06-ServletRequest
  • Spring Cloud Alibaba系列之nacos:(4)配置管理
  • 一篇五分生信临床模型预测文章代码复现——Figure 3. 基因富集分析(二)
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【css3】浏览器内核及其兼容性
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • CSS盒模型深入
  • echarts的各种常用效果展示
  • ES6核心特性
  • IDEA 插件开发入门教程
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js操作时间(持续更新)
  • js对象的深浅拷贝
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • learning koa2.x
  • quasar-framework cnodejs社区
  • React as a UI Runtime(五、列表)
  • Spark学习笔记之相关记录
  • V4L2视频输入框架概述
  • vue:响应原理
  • 阿里云Kubernetes容器服务上体验Knative
  • 对象引论
  • 微信小程序设置上一页数据
  • 学习Vue.js的五个小例子
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ​queue --- 一个同步的队列类​
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #NOIP 2014#Day.2 T3 解方程
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (c语言)strcpy函数用法
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)ObjectiveC 深浅拷贝学习
  • 、写入Shellcode到注册表上线
  • .gitignore文件---让git自动忽略指定文件
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .Net Core和.Net Standard直观理解
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET处理HTTP请求