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

文件操作安全之-文件上传原理篇

本节将详细的解释一下文件上传安全相关内容,作为我的专栏《WEB安全原理和流量日志告警解读》中的一节。

WEB网站的功能中,会经常涉及文件的增删改查等各种操作,具体的像文件上传,文件读取,文件修改以及文件删除等。除此之外,WEB中关于文件的操作还有文件包含,目录穿越等等。本章节将首先介绍一下文件上传中的安全问题。

文件上传是WEB网站中常见的功能,比如网站都是有上传头像的功能,写微博,写博客可以上传图片等等,图1即CSDN的图片上传功能:
在这里插入图片描述
图1

文件上传之漏洞原理

对于WEB类型中的文件上传多数采用的是协议RFC1867进行实现,如图2所示:

在这里插入图片描述

该文档是对HTTP协议的扩展,以满足在HTML网页中上传文件。也有些应用使用HTTP的PUT方法进行文件上传,详见HTTP的协议RFC2616,如下图3:
在这里插入图片描述

图3
文件上传漏洞往往指的是没有对上传的文件类型和内容进行控制,会导致利用上传的恶意文件进行非授权的操作。

最为经典的利用场景为在上传的位置上传一个可执行的木马文件,这种行为通常不会立即导致问题,但是如果可以通过某种方式远程执行该文件,将会导致该机器被恶意程序控制。文件上传最常见的针对的是WEB类型的服务器,所以通常攻击者上传的是一个webshell类型的文件。由于WEB本身的特性,可以正向访问该WEBSHELL,建立连接,从而控制该机器。

文件上传之漏洞举例

应该来说文件上传的漏洞曾经是非常的普遍,但是随着框架的普及以及安全意识的提升,没有任何过滤所导致的文件上传漏洞越来越少。但是绝大多数的程序员的安全编码意识仍然不够,目前文件上传漏洞的防护还是依赖于一些框架所提供的的一些机制,因此框架本身处理不当将会导致比较严重的后果。目前来看,文件上传安全的原因更多的集中在一些框架细微之处的疏忽。下面介绍几个影响比较大的文件上传漏洞

CVE-2011-2202

该漏洞是PHP5.3.7之前的版本在解析HTTP请求中的filename时候,对于filename处理不当,导致通过构造绝对filename路径实现文件的上传,如下图4 NVD中的介绍:
在这里插入图片描述
图4
可以看到漏洞的源码为PHP的main/rfc1867.c文件,即前述RFC1867协议的具体实现。由于该漏洞是PHP本身的漏洞,因此可以说影响所有使用PHP解析文件上传的网站。尽管NVD的评分并不是很高,但是个人认为该漏洞从影响面,PHP的流程程度,以及文件上传导致的后果来看,是一个非常严重的漏洞。下面根据NVD提供的patch以及exp进一步的分析该漏洞,相应的链接如下图5:
在这里插入图片描述
图5
其中exp(该漏洞的利用程序)如图6所示:
在这里插入图片描述

图6
图中exp表明只要在filename使用绝对路径,即以正斜杠开头的路径即可绕过,实现绝对路径的上传绕过。对不该漏洞patch内容,如下图7:
在这里插入图片描述
图7
对比补丁来看,修复的版本只是在指针对比的时候多了一个等于的判断,其根本的原因在于图8:
在这里插入图片描述
图8
上图在未修复的版本中,s的取值在绝对路径的情况下,例如/home/webapp,等于filename的值,因此在存在漏洞版本的中会直接使用filename 的值进行文件的写入。程序员的本意是取文件名,而非路径名,存储在指定的目录。

CVE-2020-17518

该漏洞在apache flink1.5.1至1.11.3版本中解析HTTP请求中的filename时候,没有对filename进行正确的处理,导致通过相对的filename路径实现文件的上传,如下图9 NVD中的介绍:

在这里插入图片描述
图9
由于apache flink为开源的项目,去到图9中对应的commit查看当时修复该漏洞的源码记录,这里,如图10:
在这里插入图片描述
图10
通过图10中的修复注释可以看到,在存在漏洞的版本中对于上传的文件名称没有进行过滤,直接使用fileUpload.getFilename(),导致存在相对路径绕过问题。而在修复的版本中使用了File类去除相对的路径信息。对应的EXP如下如11所示:

在这里插入图片描述
图11
对比如11中的相对路径以及图9中的源码,是很容易理解该漏洞的成因的,同时建议使用vulhub中的环境自行的验证,加深对于该漏洞的理解。由于apache flink的本意是将上传的文件存储在固定的目录,现在通过相对路径出现了绕过,因此会造成任意文件上传。

一般意义上我们讨论文件上传,通常指的是WEB类型的文件上传,但是在一些非WEB类的服务中,也是存在文件上传漏洞的,例如CVE-2010-2729,这类漏洞分析起来难度稍微有点大,感兴趣的可以看一看。

文件上传之潜在危害

前面从原理和示例两份方面针对文件上传进行了简单阐述,文件上传会导致哪些后果呢。应该来说不同具体的漏洞影响程度是不一样的。有的文件上传漏洞由于限制了文件类型,影响较小,有的没有限制,则影响较大。下面列举文件上传漏洞潜在的危害:

  • 上传脚本类文件,例如php,asp,jsp,如果存在这些可执行脚本的文件上传,则可以正向连接上传的脚本,从而建立webshell的连接,控制目标机器,拿到WEB用户的权限。
  • 上传html类等静态文件,虽然这种类型的文件不会向脚本类型的webshell直接产生较大的影响。但是如果静态文件包含跳转钓鱼网站,利用目标服务器域名的合法性,通过里利用上传文件的URL地址,诱导点击,传播钓鱼网站,间接产生影响。
  • 上传可执行文件,一般为木马文件。但是在没有权限的情况下,无法执行该木马。因此这类上传的目的一般是诱导下载,传播木马等等。

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。

相关文章:

  • 这就是为什么美联储加息 0.75% 可能对比特币有利的原因
  • 冒泡排序算法-python实现
  • 嵌入式分享合集61
  • MySQL进阶语句
  • MySQL:备份与恢复
  • Spring MVC
  • MySQL 日志管理
  • 机器学习之特征选择
  • 高薪程序员面试题精讲系列149之你熟悉单点登录吗?说说单点登录的实现原理及流程
  • 【Unity3D】顶点和片段着色器
  • jmeter实战
  • 【零基础学QT】第十章 项目打包,利用Inno Setup制作软件安装包
  • LeetCode合并有序数组
  • 微信小程序分享一个视频给好友
  • 南大通用GBase8s 常用SQL语句(260)
  • JavaScript-如何实现克隆(clone)函数
  • happypack两次报错的问题
  • Leetcode 27 Remove Element
  • MySQL QA
  • PAT A1120
  • ucore操作系统实验笔记 - 重新理解中断
  • 从0到1:PostCSS 插件开发最佳实践
  • 基于 Babel 的 npm 包最小化设置
  • 蓝海存储开关机注意事项总结
  • 老板让我十分钟上手nx-admin
  • 我是如何设计 Upload 上传组件的
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​批处理文件中的errorlevel用法
  • ​什么是bug?bug的源头在哪里?
  • #AngularJS#$sce.trustAsResourceUrl
  • $$$$GB2312-80区位编码表$$$$
  • (09)Hive——CTE 公共表达式
  • (1) caustics\
  • (4)Elastix图像配准:3D图像
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (过滤器)Filter和(监听器)listener
  • (三) diretfbrc详解
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • . Flume面试题
  • .NET Core 中的路径问题
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net操作Excel出错解决
  • .NET多线程执行函数
  • .net中生成excel后调整宽度
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @private @protected @public
  • @test注解_Spring 自定义注解你了解过吗?
  • [ SNOI 2013 ] Quare
  • [ActionScript][AS3]小小笔记