文件上传漏洞

article/2025/9/29 5:57:20

文件上传漏洞

1. 文件上传功能

文件上传功能是大部分WEB应用的必备功能,站点常见文件上传点有:用户头像上传、社交类网站允许用户上传照片、服务类网站需要用户上传证明材料的电子档、电商类网站允许用户上传图片展示商品情况等。然而,看似普通的文件上传功能如果缺法安全防护措施,就存在巨大的安全风险。

2. 文件上传漏洞

文件上传漏洞是指攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。通常是因web应用程序没有对上传的文件进行安全判断或者判断条件不够严谨,导致恶意攻击者可以上传木马脚本文件到服务器中,从而执行恶意代码。

3. 文件上传漏洞利用

3.1 文件上传流程

通常文件上传过程为客户端以文件表单的方式向服务器提交上传的文件数据,服务器接受请求包,接受上传的文件生成临时文件,对临时文件进行安全性检测,读取临时文件信息,判断文件是否合规,通过文件安全性检测后,才会将文件保存到服务器.

3.2 文件上传漏洞利用流程

文件上传漏洞利用通常分为两个部分:webshell文件上传和webshell文件连接。第一部分:Webshell文件上传部分,需要利用网站文件上传功能点,绕过站点的安全性检测上传websehll文件到服务器中,还需要确认文件的存放路径,文件名是否有被服务器重名命以及文件能否正确被服务端脚本语言解析。第二部分:webshell文件连接,使用浏览器打开webshell文件或者使用工具连接webshell文件,扩展功能。

4. 常见的文件上传漏洞成因

1.服务器配置不当
在不需要上传文件的情况下可导致任意文件上传,参考HTTP请求方法PUT

2.本地文件上传被绕过
只在客户端浏览器上做了文件限制而没有在远程的服务器上做限制,只需要修改上传时发送的数据包就可以轻松绕过上传限制

3.过滤不严或被绕过
有些网站使用上传黑名单过滤掉一些可执行文件脚本的后缀,但是黑名单不全或者被绕过,也可导致恶意文件上传。如果使用白名单,仅允许名单内所包含的文件格式上传会更加安全。

4解析漏洞导致文件执行
前端修改文件后缀,绕过针对后缀名的黑白名限制,当修改后缀的文件可以被当成服务端语言脚本解析。例如:php5、php3、phtml等后缀可以被服务端脚本语言解析。

5.路径截断
路径解读与系统解析文件有关,例如:window操作在读取文件时,当碰到%00时,就不会再解析空格后面的内容。以“1.php%00.txt”为例,当解析到%00时,该文件后缀.txt不会被解析,则该文件会被当成php脚本进行处理。

5. 常见的上传限制和绕过

通过文件上传流程可以得知,前端上传的文件需要通过安全检测才能保存到服务器,随着开发人员安全意识的提高,通常在文件上传点对上传的文件进行严格的检测,常见的文件上传限制根据文件上传前后可以分为客户端校验和服务端校验。
在这里插入图片描述

5.1客户端校验

客户端验证是一种发生在输入被实际发送至服务器之前进行的验证。这类验证大都都是通过JavaScript,VBScript或HTML5来完成的,通过黑名单或者表名单的方式对文件后缀进行校验。

5.2 客户端校验绕过

针对客户端校验文件后缀的限制,绕过限制的方式有:
①禁用前端校验脚本语言,或修改脚本,使得脚本无法运行
②修改文件后缀符合客户端上传条件,然后使用burpsuite抓包,改为脚本语言后缀。

5.3 服务端校验-MIME类型检测

MIME:多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
在服务端读取上传文件的MIME类型,对MIME类型做限定,检测文件类型。

5.4 服务端校验-MIME类型限制绕过

标准的文件上传组件中会自动上传文件的MIME类型,但是由于MIME类型是从客户端传递的,修改也不影响文件正常运行,因此通过Burp Suite拦截和修改Content-Type字段的MIME类型就绕过服务端的MIME检测,附上常见的MIME类型。

audio/mpeg -> .mp3
application/msword -> .doc
application/octet-stream -> .exe
application/pdf -> .pdf
application/x-javascript -> .js
application/x-rar -> .rar
application/zip -> .zip
image/gif -> .gif
image/jpeg -> .jpg / .jpeg
image/png -> .png
text/plain -> .txt
text/html -> .html
video/mp4 -> .mp4

5.5 服务端检测-文件扩展名检测

文件扩展名即为文件后缀名,服务端读取文件的后缀名,对后缀名进行限定,常见的限定方式为黑名单限制和白名单限制。黑名单限制不允许文件后缀名在名单的文件上传,白名单限制只允许在名单内文件后缀的文件上传。

5.6 服务端检测-文件扩展名黑白名单绕过

①文件名大小写绕过,例如:xx.Php xx.AsP
②特殊文件名绕过,例如:windows文件名后缀不能有.或空格
③0x00截断绕过,例如:xx.php(0x00).jpg
④服务器解析漏洞,例如php3、php5,phtml等特殊扩展名会被当做php文件解析。
⑤文件包含漏洞,利用文件包含使得文件被作为脚本语言文件执行。
⑥.htaccess文件攻击,更改文件解析类型

5.7 服务端检测-文件内容检测

针对文件内容进行,例如检测文件头部,很多文件都使用幻数来标记文件格式,幻数通常可以用来标记文件格式还有协议的格式。例如jpg图片文件的幻数为FFD8FFD9 00104A464946

5.8服务端检测-文件内容限制绕过

使用工具在不破坏文件本身渲染的情况下,通常选择图片的注释部分,写入shell代码。
在这里插入图片描述

文件上传漏洞修复

1 前端JS代码过滤
前端通过JS代码做第一次过滤,可以起到一定的防范作用。虽然可以被burp人工绕过,但仍然可以减少一些攻击行为,以及过滤掉正常用户的误上传操作,减轻后台服务器的压力。

2 后端设置黑白名单
通过设置黑名单或者白名单的方式,对上传文件的后缀做严格的检查。但黑名单可能出现遗漏的情况,也可能被大小写等方式绕过,因此白名单一般更安全。

3 上传文件大小限制
避免攻击者上传过大的恶意脚本,防止由于内存、磁盘耗尽而造成的拒绝服务攻击。

4 限制相关功能目录的执行权限
只要Web容器无法解析该目录下的文件,即使攻击者上传了恶意脚本文件,服务器本身也不会受到影响。当前一些网站,在文件上传之后,会将文件放到独立的存储上,做静态文件处理,一方面方便使用缓存加速,降低性能损耗,另一方面也杜绝了脚本被执行的可能性。

5 上传文件文件名重写
只要攻击者无法获取他们上传的脚本的文件名,使攻击者无法访问到上传的恶意脚本了。

6 隐藏上传文件路径
不对用户显示上传文件的存放路径,使攻击者无法访问到上传的恶意脚本了。


http://chatgpt.dhexx.cn/article/eWI6sHjO.shtml

相关文章

java fckeditor 上传图片_java下FCKeditor上传图片问题

展开全部 先到tomcat->webapps里建立一个文件夹叫mysite。把FCKeditor里的/editor和fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml四个文件copy到mysite文件夹里,因为别的文件对我32313133353236313431303231363533e58685e5aeb931333239303264们…

Consider defining a bean of type ‘com.course.server.mapper.TestMapper‘ in your configuration.

问题 Description:A component required a bean of type com.course.server.mapper.TestMapper that could not be found.Action:Consider defining a bean of type com.course.server.mapper.TestMapper in your configuration.解决 我用了mybatis,在mapper层忘记…

@ManyToMany mappedby

学生和老师就是多对多的关系。一个学生有多个老师,一个老师教多个学生。多对多映射采取中间表连接的映射策略,建立的中间表将分别引入两边的主键作为外键。jpa 对于中间表的元数据提供了可配置的方式,用户可以自定义中间表的表名,…

MapDB简单用法

MapDB提供了Java映射、集、列表、队列和其他由非堆或磁盘存储支持的集合。它是java集合框架和嵌入式数据库引擎之间的混合。它是Apache许可下的免费和开放源码。 如果处理GB级数据,请考虑使用非缓存存储容器,比如本篇提到的MapDB,而不要把庞大…

BaseMapper

* 1.公共的方法进行抽取,抽取到BaseMapper接口中,将用户操作的方法对象,转化为数据库能够识别的SQL语句 * 2.通过userMapper查找父级接口BaseMapper * 3.根据BaseMapper查找泛型对象User对象 * 4.根据user对象查找指定的注解TableName,获取表明 * 5.根据user对象的属性,动态获取…

MappedBy

对于mappedBy复习下: a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性; b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方); c) mappedBy的含义…

Data Mapper

使用 Data Mapper分离数据源的Model和页面现实的Model&#xff0c;不要因为数据源的增加、修改或者删除&#xff0c;导致上层页面也要跟着一起修改 interface Mapper<I,O> {fun map(input:I):O }data class CarEntity(var no:String) data class CarModel(var num:String…

全网最详细的postman接口测试教程,一篇文章满足你

目录 目录 1、前言 2、接口理论 3、接口实例 一、POST 二、GET 4、总结&#xff1a; 1、前言 之前还没实际做过接口测试的时候呢&#xff0c;对接口测试这个概念比较渺茫&#xff0c;只能靠百度&#xff0c;查看各种接口实例&#xff0c;然后在工作中也没用上&#xff0c;…

简单粗暴的PostMan使用说明文档让你一片文章看懂PostMan怎么使用

PostMan功能简单介绍 创建文件夹 点击Collections创建新的文件夹&#xff0c;可以将不同的接口存入不同的文件夹中 点击右边三个点可以进行设置&#xff0c;Rename是重新命名 点击Add request&#xff0c;会在右侧创建一个get请求方式的request。 点击Add Folder&#xff0…

postman基础使用教程

Postman教程大全 - 简书推荐一款接口测试工具&#xff01;POSTMAN&#xff01;简单来说&#xff0c;四个词&#xff0c;简单实用大方美观&#xff01; Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件 Postman背景...https://www.jianshu.com/p/97ba64888894 …

不会接口测试?用Postman轻松入门(一)—— Postman实现get和post请求

测试行业现在越来越卷&#xff0c;不会点接口测试好像简历都已经拿不出手了&#xff0c;但很多小伙伴都会头疼&#xff1a;接口测试应该怎么入门&#xff1f;那么多的接口测试工具应该学哪个&#xff1f; 其实&#xff0c;接口测试工具&#xff0c;就像吃饭用的筷子&#xff0…

Postman快速入门(一)

一、基本介绍 postman是一款流程的接口调试工具&#xff0c;其特点就是使用简单&#xff0c;功能强大。使用角色也非常广泛&#xff0c;后端开发&#xff0c;前端人员&#xff0c;测试人员都可以使用它进行接口调试或测试。 下图是基本功能介绍 发送第一个请求 如果你是第一次…

Postman工具介绍以及使用方法教程(一)

Postman工具 1、postman简介 Postman最早是Google浏览器的一个插件存在的&#xff0c;因为Google退出国内市场&#xff0c;现在postman主要是以一个 APP的形式存在。 Postman最初设计上就是为接口测试而设计的&#xff0c;对于测试人员来说主要用来做接口测试。 2、postman的…

使用PostMan上传文件,有图易懂

现在&#xff0c;越来越多的人习惯用postman来测试接口。那么&#xff0c;关于如何使用postman来上传文件&#xff0c;本文进行讲解 1、将请求方式选择为post 2、填写接口地址 3、填写请求头 key&#xff1a;Content-Type value&#xff1a;multipart/form-data 4、填写Body…

postman-使用post请求

一. postman简介 Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上…

Postman全网最详细使用教程

Postman全网最详细使用教程 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「postman」, 获取postman插件和安装程序&#xff1a; http://www.javaman.cn/jszw/postman 一、postman的安装 postman的安装分为两种&#xff0c;通过chrome浏览器插件安装…

Postman-APIs是干什么的?

最近用postman探索接口自动化&#xff0c;发现里面的APIs这个模块&#xff0c;很少用到&#xff0c;平常都是直接在Collections模块创建请求就完事了。但是想做自动化时&#xff0c;发现需要先把接口定义出来&#xff0c;基于接口创建用例&#xff0c;这样直接用Collections就显…

2022最新Postman安装以及基本操作使用教程

一、postman安装 Postman一款非常流行的API调试工具。其实&#xff0c;开发人员用的更多。因为测试人员做接口测试会有更多选择&#xff0c;例如Jmeter、soapUI等。不过&#xff0c;对于开发过程中去调试接口&#xff0c;Postman确实足够的简单方便&#xff0c;而且功能强大。…

接口测试之Postman使用全图文指南(原来使用Postman测试API接口如此简单)

为什么要做接口测试&#xff1f; 接口的由来&#xff1a; 连接前后端以及移动端。 因为不同端的工作进度不一样&#xff0c;所以需要对开始出来的接口进行接口测试。 做接口测试的好处&#xff1a; 1、节约时间&#xff0c;缩短项目成本 2、提高工作效率 3、提高系统的健壮性…

Postman使用小技巧 - 用Postman生成Request代码

Postman这款工具可以让你很方便的测试你的Web API&#xff0c;那如果你实在是没办法用Postman&#xff0c;必须手写代码&#xff0c;又或者你有别的需求是Postman没法实现的&#xff0c;你必须写一个特殊的script或App来测试你的接口&#xff0c;那这时候是不是Postman就没有用…