文件上传漏洞简介

news2024/12/28 8:25:18

目录

漏洞原理

漏洞危害

利用场景

检测方法

防御方法

绕过手段

前端JS绕过

构造可解析后缀

修改Content-Type(MIME)

大小写绕过

文件头绕过

图片马

截断与特殊文件名

其他绕过 

尝试绕过的步骤


漏洞原理

原理

  • 攻击者构造恶意文件进行上传,而服务端没有对上传点进行合法性校验,攻击者能得知文件上
    传的位置,且文件能够被正确解析执行。如图所示:
总结
恶意文件能上传 + 文件路径可以获取 + 恶意文件能被访问或者执行 =文件上传漏洞

漏洞危害

  • 攻击服务器:可以通过上传和执行webshell来运行命令、浏览系统文件、甚至是接管服务

    器。

  • 攻击客户端:上传恶意文件还可能是的网站容易受到客户端攻击,例如xss或者劫持等。

  • 上传的文件可能会触发实时监控工具中的漏洞。

  • 上传功能可能触发程序报错、泄露敏感信息(暴露内部信息,比如服务器内部路径)。

  • 上传功能可能被恶意利用,比如被用来托管恶意软件、非法软件或成人内容。上传的文件还可

    能包含使用隐写术隐藏的数据。

上传具体文件可能带来的危害:

  • 允许上传脚本语言文件且解析 ==> getshell
  • 允许上传html ==> xsscsrf、登陆劫持...
  • 允许上传压缩包 ==> 压缩包DOS、解压文件getshell
  • 允许上传pdf ==> pdf xss
  • 允许上传exceldocx ==> xxe

利用场景

一切有上传点的地方

  • 更换头像,背景图片
  • 上传附件

检测方法

寻找到注入点

          根据功能点寻找、爆破上传接口、富文本编辑器上传等等

上传目标点不允许上传的文件

          通过任意上传、绕过防御上传、绕过waf上传、条件竞争上传等方式上传目标文件

找到上传文件的路劲进行访问

          服务端直接返回完整访问地址、返回部分需要拼接、爆破访问地址等方式

防御方法

1.后缀白名单(最有效直接),只允许上传服务端允许上传的文件

2.内容完整性检测,检查上传的文件是否包含恶意代码

3.检查是否可以找到上传的文件的访问路径,并检查是否可以直接访问或执行

绕过验证或者限制措施

  •  检查网站是否仅在客户端js验证了文件类型
  • 检查网站是否仅通过http请求中的“content-type”检查文件类型

  • 检查网站是否仅通过文件扩展名来检查

绕过手段

前端JS绕过

构造可解析后缀

上传特殊可解析后缀,通过各语言可解析的后缀进行绕过上传(通常针对黑名单)

语言可解析后缀

asp/aspx

asp,aspx,asa,asax,ascx,ashx,asmx,cer,aSp,aSpx,aSa,aSax,aScx,aShx,aSmx,cEr

php

php,php5,php4,php3,php2,pHp,pHp5,pHp4,pHp3,pHp2,html,htm,phtml,pht,Html,Htm,pHtm

jsp

jsp,jspa,jspx,jsw,jsv,jspf,jtml,jSp,jSpx,jSpa,jSw,jSv,jSpf,jHtml

修改Content-TypeMIME

后端通过Content-Type来校验文件类型,抓包拦截修改Content-Type为其允许的文件即可(如图),常见类型见下

文件类型后缀名Content-type 
超文本标记语言文本 .html、.htmltext/html
普通文本.txttext/plain
RTF 文本 .rtfapplication/rtf
GIF 图形 .gifimage/gif
JPEG 图形 .jpeg、.jpg image/jpeg
au 声音文件 .au audio/basic
MIDI 音乐文件 mid、.midi audio/midi、audio/x-midi
RealAudio 音乐文件 .ra、.ramaudio/x-pn-realaudio
MPEG 文件 .mpg、.mpegvideo/mpeg
AVI 文件 .avivideo/x-msvideo
GZIP 文件 .gzapplication/x-gzip
TAR 文件 .tarapplication/x-tar

大小写绕过

将文件后缀进行大小写混写,如:PhpPHpPHP/jSpJSPjsP

文件头绕过

文件头,文件幻数是用来唯一标识文件类型的一系列数字(十六进制),也就是我们常说的文件头,当白名单限制了文件幻数时,我们就要给我们的文件制造可以通过检测的文件头即可,常见对应文件的值如下:

.jpg

Value = FF D8 FF E0

.gifValue = 47 49 46 38 ==> GIF89a
.pngValue = 89 50 4E 47
.htmlValue = 68 74 6D 6C 3E 10
.xmlValue = 3C 3F 78 6D 6C

使用Winhex打开一张图片即可查看,也可进行修改,如下图:

图片马

图片马:如果后缀可以为jspphp等,但是内容必须为图片,那么可以用图片马来进行getshell,常用的生成手法如下

在cmd中

copy test.gif/b+test.php/a gifshell.gif

  • /b是二进制形式打开
  • /a是ascii方式打开

截断与特殊文件名

截断:

0x00截断绕过:文件名后缀有一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中,处理字符串的函数中0x00被认为是终止符。

例如: 网站上传函数处理xxx.asp%00.jpg时,首先后缀名是合法的jpg格式,可以上传,在保存文件时,遇到%00字符丢弃后面的.jpg,文件后缀最终保存的后缀名为xxx.asp

截断条件:

php版本小于5.3.4 详情关注CVE-2006-7243

php的参数开关上设置里magic_quotes_gpc为OFF状态

特殊文件名:

特殊文件名绕过,在Windows下有一个特性就是如果文件后缀以点‘.’或者空格‘ ’结尾的后缀名时,系统在保存文件时会自动去除点和空格。但要注意 Unix/Linux 系统没有这个特性。因为有些服务器端的后缀名检测是取文件名最后一个.后面的字符串,拿这个字符串与黑名单列表对比

如下图:

其他绕过 

1、条件竞争:如果网站的文件上传的过程是:“服务器获取文件–>保存上传临时文件–>重命名移动临时文件” 这样的步骤时,就可以通过不断地对文件进行上传和访问,从而使服务器还未重命名移动临时文件时,我们就利用时间差打开了文件,成功执行其中的恶意代码。

2、双后缀绕过,顾名思义,写两个后缀可能指检测到去掉一个

尝试绕过的步骤

根据网站时由什么语言开发。则上传什么脚本语言

1、前端绕过

2、黑名单绕过

3、白名单绕过

4、其他方式,竞争上传、双上传、文件内容等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1714347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RTPS协议之Behavior Module

目录 交互要求基本要求RTPS Writer 行为RTPS Reader行为 RTPS协议的实现与Reader匹配的Writer的行为涉及到的类型RTPS Writer实现RTPS WriterRTPS StatelessWriterRTPS ReaderLocatorRTPS StatefulWriterRTPS ReaderProxyRTPS ChangeForReader RTPS StatelessWriter BehaviorBe…

keil4和5版本代码编译错误问题

需求: 在工作中, 遇到了keil4工程的老代码, 需要烧录到板子中. 问题: 电脑中只有keil5软件, 使用keil5软件打开, 编译后报了一堆错, 还是官方库文件的错误, 这就是版本不兼容了. 解决方法: 下载keil4软件, 不要和keil5放到一起. 进行如下操作. 0. 根据如下链接来下载keil4.7…

拥塞控制的微观行为与力学解释

本文以 tcptrace 图为基,描述传输的微观行为,并给出一个初中几何描述的压水井模型。 统计复用网络的拥塞控制,宏观看 inflight,微观看 pacing rate,宏观大方向不对,微观再正确也不行。 而网络的统计动力学…

推荐丨一键申请SSL证书,让网站实现HTTPS访问!

申请HTTPS证书可以简化为以下几个直接步骤,以便您能快速理解和操作: 1. 确定证书类型: - 单域名证书:适用于一个特定域名。 - 通配符证书:适用于同一主域名下的所有子域名。 - 多域名证书:覆盖多个不同的域…

polarctf靶场[reverse]shell、PE结构、拼接

[reverse]shell 考点:脱壳 将所解压的文件拖入DIE有无有壳,文件类型 发现有UPX壳,是32位的文件,先脱壳 用FFI工具脱壳 将脱壳后的程序用32位IDA进行反汇编 点开_main_0函数进行查看 看到flag,(F5&#…

【PostgreSQL17新特性之-事务级别超时参数transaction_timeout】

PostgreSQL数据库里有多个和会话相关的参数,PostgreSQL17-beta1版本新增了一个transaction_timeout参数,来限制事务的持续时间。 当前的一些和会话相关的超时参数如下 -----------------------------------------------------------------------------…

【学习Day2】计算机基础

✍🏻记录学习过程中的输出,坚持每天学习一点点~ ❤️希望能给大家提供帮助~欢迎点赞👍🏻收藏⭐评论✍🏻指点🙏 1.4 校验码 奇偶校验 ● 奇偶校验码的编码方法是: 由若干位有效信息的头部或者…

PowerPivot-跨表取值

在PowerPivot中,跨表取值通常涉及创建关系和使用DAX(数据分析表达式)函数。 以下是一些基本步骤和常用的DAX函数,帮助你在PowerPivot中实现跨表取值: 步骤1:创建关系 加载数据:确保你已将需要…

FreeRTOS【9】计数信号量使用

1.开发背景 FreeRTOS 基于上一篇了解了二值信号量后,如果需要设计需要累计信号量的次数就不行了,所以有了计数信号量,可以设置计数的最大值。同样,可以理解二值信号量是计数信号量的一种特例,即二值信号量是计数信号量…

利用QtScrcpy与Power Automate 实现微信群批量自动清理

Power Automate 一、Power Automate window系统自带软件 在开始使用Power Automate之前,需要熟悉它的基本概念和功能。Power Automate的核心概念包括触发器、操作和连接器。触发器是指触发自动化流程的事件,操作是指在自动化流程中执行的操作&#xff0…

数据结构(十)图

文章目录 图的简介图的定义图的结构图的分类无向图有向图带权图(Wighted Graph) 图的存储邻接矩阵(Adjacency Matrix)邻接表代码实现 图的遍历深度优先搜索(DFS,Depth Fisrt Search)遍历抖索过程…

ai写作助手有哪些,5款强大的ai写作工具为你所用

在科技日新月异的时代,人工智能已经悄然走进我们的生活,为我们带来了诸多便利。其中,AI写作助手作为一种创新的工具,正在改变着我们的写作方式。它们不仅能够提供创意灵感,还能帮助我们提高写作效率,让文字…

在VSCode 中增加文件与文件夹的可辨识度

今天重新打开VSCode,打算新建一个项目做测试,看到VSCode中的文件与文件夹很不容易辨认,有时候容易导致一些误操作,需要做一些配置来改变。 效果图: 只需要做简单的2步就可以了。 1、安装插件 ⑴ 打开VSCode的扩展搜索并…

由浅入深二叉树刷题指南与讲解

目录 前言二叉树OJ基础题目1. 单值二叉树2. 检查两棵树是否相同3. 二叉树的前中后序遍历4. 另一棵树的子树5. 对称二叉树6. 二叉树的构建以及遍历 二叉树其他方法的实现1. 二叉树的销毁2. 层序遍历3. 判断二叉树是否是完全二叉树 二叉树的其他性质总结 前言 上一篇我们已经了解…

整理三维空间内4点的209个结构

4点的209个结构按照旋转对称的关系可分成73组 如1,72,177为一组, z y x z y x 1 72 177 1 2 10 93 4 * 4 74 39 2 * 3 73 179 5 * 5 76 178 3 * 6 75 133 6 7 77 180 7 8 8 89 34 9 11 95 35 * 35 91 …

编译安装MySQL服务(LAMP2)

目录 1.初始化设置,将安装mysql 所需软件包传到/opt目录下 (1)关闭防火墙 (2)上传软件包到/opt目录 2.安装环境依赖包 3.配置软件模块 4.编译及安装 5.创建mysql用户 6.修改mysql 配置文件 7.更改mysql安装目…

AB实验人群定向HTE模型1 - Causal Tree

背景 论文给出基于决策树估计实验对不同用户的不同影响。并提出Honest,variance Penalty算法旨在改进CART在tree growth过程中的过拟合问题。 我们举个例子:科研人员想衡量一种新的降血压药对病人的效果,发现服药的患者有些血压降低但有些血…

APP逆向之调试的开启

很基础的一个功能设置,大佬轻喷。 背景 在开始进行对APP逆向分析的时候,需要对APP打开调试模式。 打开调试的模式有多种方式可以通过直接改包方式也可以通过借助第三方工具进行打开调试模式。 下面就整理下这个打开调试模式的一些方式。 改包修改模…

vue+element-ui时间级联动态表单,新增行,删除行,表单验证

需求背景: 需要实现配置一种时间去执行定时任务,可能是每年一次,每月一次,每周一次,每天一次四种情况,最少配置一条,最多配置五条。年,月,周,日,时分秒是级联关系。点击提交,整体表单校验。 效果图 代码实现,具体看里面的注释 完整代码 <template><e…

elastich运维

Elastichsearch是一种高度可扩展的开源全文搜索和分析引擎&#xff0c;可以用来实现快速、高效的数据检索。 集群规划与部署&#xff1a;首先需要根据业务需求规划Elastichsearch集群的节点数量和角色&#xff08;如主节点、副本节点、协调节点等&#xff09;。在部署时&#x…