文件上传漏洞总结(全)

article/2025/10/13 0:49:34

文件上传漏洞

凡是存在上传文件的地方,都有可能存在文件上传漏洞,并不是说有文件上传就一定有文件上传漏洞。

原理

这主要看一些文件上传的代码有没有 严格限制用户上传的文件类型,比如,只可以上传.jpg|.png|.gif文件,但是由于代码不严谨,或者只在前端验证这个文件的格式等等,造成了攻击者可以上传任意PHP文件,自定义文件。

危害

可以通过这个漏洞上传后门文件,webshell,可以直接获取网站权限,然后获取服务器的提权,获取内网权限,或去用户信息等等。属于高危漏洞。

查找:

黑盒:对方的网站情况,源码我们是不知道的。通过目录扫描获取到文件上传地址,功能查找,看网站有没有文件上传功能,比如会员中心上传头像等等。
白盒:有了源码,通过代码分析,本地测试。

利用思路:

常规类:扫描获取上传、会员中心上传、后台系统上传、各种途径上传。CMS类:已知CMS源码。编译器类:ckeditor、fckeditor、kindeditor、xxxxeditor。其他类/CVE:代码审计、平台/第三方应用。

文件上传常见验证

文件头的验证(文件内容的验证):属于间接验证,内容头信息,不严谨可通过抓包修改进行欺骗。

文件类型的验证:属于间接验证:MIME信息 也就是数据包中的content-Type类型。可以修改进行一个欺骗。不严谨。

后缀名的验证:属于直接验证,黑名单验证和白名单验证。黑名单就是明确不允许上传......文件类型,如:.asp、.php、.jsp、.aspx、.cgi、war文件。当然也得看情况是否支持。白名单就是明确只允许上传......文件,如:.jpg、.png、.gif、zip、rar文件,相对黑名单较安全。

思路

一.黑名单的绕过

1.有些黑名单定义的不可上传文件的后缀名不完整,可以用.php5、.phtml、.phps、.pht文件进行上传,从而实现绕过。

2.上传配置文件.htaccess,在这个文件写上代码
<FilesMatch "x.png">
SetHandler application/x-httpd-php
如果有一个文件的名字是x.png,那么这个png文件就会被当作php文件进行解析,这样也可以实现绕过

3.大小写绕过将.phP文件名后缀大写

4.收尾去空绕过,在后缀名加空格(需要在抓到的数据包中加空格,直接在文件后缀名加空格会命名不成功,它会自动删除空格)

5.不删除末尾的点,在后缀名加点(需要在抓到的数据包中加点,直接在文件后缀名加点会命名不成功,它会自动删除点)

6.没有去除字符串::$DATA。如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名。例如:x.php::$DATA,Windows会自动去掉末尾的::$DATA变成x.php,但是这刚好就可以绕过黑名单了。

7.有时没有循环验证,只验证一次,可以使用x.php. .类似的方法进行绕过。(方法不止一种,视情况而定)

二.白名单的绕过

1.可以使用%00进行截断。%00只能用于php版本低于5.3的

2.图片马进行绕过

3.条件竞争进行绕过。
白名单要配合其他漏洞进行利用。

三.中间件之服务器

如果我们尝试上述的方法进行测试,发现网站确实没有漏洞,这时我们就可以对他的中间件进行测试。

1.IIS6.0版本

(1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析。
(2) 当上传文件.asp;*.jpg IIS6.0会将文件当做asp文件解析。

2.apache低版本(2.x)

如果对方中间件是apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中的后门代码被执行。例如:x.php.aaa.bbb.ccc.ddd,可以被当作php文件进行解析,从最后一个.ddd开始,apache不认识,就往前走,一直到.php,这样即绕过了验证,有可以进行解析。

3.apache换行解析漏洞(2.4.0--2.4.29)

在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

4.Nginx低版本、II7

上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。

5.Nginx文件名逻辑(0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)

我们只需要上传一个空格结尾的文件,即可使PHP解析

四.中间件之编译器

可以参考:https://navisec.it/编辑器漏洞手册/

五.WAF绕过

如果对方有安全狗一些防护软件,我们应该如何进行绕过
1.要明确上传参数名哪些东西可以更改,哪些不可以
Content-Disposition:一般不可以更改
name:表单参数值,不能更改
filename:文件名,可以更改
Content-Type:文件mime,视情况更改

2.绕过方法
数据溢出,防匹配,比如:filename=“x.php”可以在名字上写入大量的立即数据,让安全狗匹配不到,filename=“aaaaaaaaaasssssssssssfggghgjghtuyrfuy6tfgufujfffx.php”,大量写入,我这里这个量是不够的,自行测试。
符号变异,防匹配,filename=“x.jpg;.php”
数据截断防匹配,(%00;换行)
重复数据防匹配(参数多次写入)

安全修复

1.后端验证:采用服务端验证模式
2.后缀验证:基于白名单,黑名单过滤
3.MIME验证:基于上传自带类型艰检测
4.内容检测:文件头,完整性检测
5.自带函数过滤
6.WAF防护软件:宝塔、云盾等

最后附上我整理的学习路线,觉得对你有帮助的话记得给我留言哦~

学习路线

同时每个成长路线对应的板块都有配套的视频提供:

 

 


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

相关文章

文件上传漏洞详解(CTF篇)

需要了解的前置知识&#xff1a; 1.什么是文件上传&#xff1a; 文件上传就是通过流的方式将文件写到服务器上文件上传必须以POST提交表单表单中需要 <input type"file" name"upload"> 2.一句话木马 <?php eval($_POST[a]) ?>其中eval就…

web漏洞——文件上传漏洞(upload-labs)

一、文件上传漏洞简介、原理、高危触发点、防御 文件上传漏洞简介&#xff1a; 由于程序员在对用户文件上传部分的控制不足或者处理缺陷&#xff0c;而导致的用户可以越过其本身权限向 服务器 上上传可执行的动态脚本文件。这里上传的文件可以是木马&#xff0c;病毒&#xff0…

Python中OpenCV+Numpy安装配置

1.安装OpenCV Numpy 安装OpenCV 下载地址&#xff1a;http://www.lfd.uci.edu/~gohlke/pythonlibs/ 安装Numpy 下载地址&#xff1a;https://pypi.python.org/pypi/numpy 根据python版本选择相应的opencv版本&#xff0c;例如在Windows64操作系统下python3.7.1…

python中numpy模块安装_numpy安装,python中怎样安装numpy模块

python中怎样安装numpy模块 1.在python官网https://pypi.python.org/pypi/numpy中找到安装的python版本对应的numpy版本。 例如: python版本是 下载的对应numpy版本是 2.将numpy下载到 python的安装目录下的scripts文件夹中 3.然后在cmd中执行以下命令 ip3.6 install D:j…

python之Numpy 安装

1、在windows下&#xff0c;ctrlR&#xff0c;进入运行&#xff1b; 2、进入到Python所在的目录&#xff0c;默认为c&#xff1a;\\Python27 3、运行命令 python -m pip install numpy 4、系统显示如下&#xff1a;collecting numpy,开始自动进行安装&#xff1b; 5、显示进…

numpy的安装与使用

文章目录 前言 一、numpy是什么&#xff1f; 1、Numpy的数据结构 1.1 元数据&#xff08;metadata&#xff09; 1.2 实际数据 2、ndarray数组对象的特点 3、Numpy的优点 二、安装numpy 三、开始使用 3.1 引入库 3.2 查看numpy安装版本 3.3 牛刀小试 3.4 numpy VS list 总结 前言…

【Numpy学习笔记1】numpy安装、维度、基本运算、改变数据形态

1.Numpy使用场景 需要批量处理数据的时候机器学习&#xff0c;人工智能这些需要进行海量数据运算处理的地方写游戏里面的物体运行逻辑时&#xff0c;经常涉及到矩阵、向量运算机器人模拟环境&#xff0c;背后的环境反馈信息&#xff0c;全是靠批量数据算出来的任何需要做统计的…

pythonnumpy官网_Numpy安装

问题引入&#xff1a;电脑里安装了从官网下载的python3.8.0,。先使用了菜鸟教程的方法2安装。https://www.runoob.com/numpy/numpy-install.html 发现产生错误。先是提示我的pip工具没有更新到最新版本&#xff0c;于是根据提示更新后&#xff0c;发现仍有错误&#xff0c;于是…

numpy的安装

安装 1.以管理员身份打开cmd 2.输入命令安装numpy插件 pip insatll numpy 3.使用以下命令查看是否安装成功 pip list 出现numpy就安装成功

如何在matlab坐标轴上输入希腊字符和开根号符号

1.以输入\mu为例&#xff0c;要将解释器选择为 tex&#xff0c;不过matlab默认的就是tex. xlabel(\mum,FontName,Arial,fontsize,24,Interpreter,tex); 效果如下图所示&#xff1a; 2.输入开根号&#xff0c;需要把解释器改为latex. clear,clc ylabel($Z_{0} \sqrt {\epsilo…

matlab之方程式求根

一.利用syms和solve() 利用syms和sym定义一个标志变量 syms x sym(‘x’) 2.求方程根&#xff1a; 求x-2y5与xy6的联立方程组的根&#xff1a; 3.对函数求微分 4.对函数求积分 5. fsolve()

利用MATLAB对于符号方程进行求解

在数学计算中&#xff0c;我们经常需要对于方程或者是方程组进行求解&#xff0c;对方程的求解是数学中的一个重要的知识点。在MATLAB中提供了solve函数用于对于符号表达式的求解。solve函数有多种调用方式&#xff0c;包括如下所示&#xff1a; solve(equ)&#xff1a;对于等…

利用matlab进行多项式求根——符号解

问题描述&#xff1a;对于一个方程&#xff0c;比如&#xff1a; a x 2 b x c 0 ax^2bxc0 ax2bxc0&#xff0c;我们想要求出关于x的表达式&#xff08;求根&#xff09;。 如果a&#xff0c;b&#xff0c;c是已知的&#xff0c;或者说是某个确定的数值&#xff0c;那么我们…

MATLAB(十)方程式求根

文章目录 前言符号寻根法符号根查找&#xff1a;solve ()解决多个方程用符号表示的方程Exercise练习符号区分&#xff1a;diff ()Exercise练习象征性的集成&#xff1a;int()Exercise练习回顾函数句柄()fsolve()Exercise练习fzero()求多项式的根&#xff1a;roots()二分法(或分…

matlab根号二,matlab根号二怎么打_常见问题解析,matlab,根号二,根号

matlab级数求和的方法_常见问题解析 matlab级数求和使用symsum函数&#xff0c;有4种方式&#xff0c;分别为symsum(expr)、symsum(expr,v)、symsum(expr,a,b)和symsum(f,v,a,b)。 matlab根号二怎么打 matlab中根号使用^来表示&#xff0c;根号二的表示方法为&#xff1a;2^0.5…

matlab 坐标轴根号,Matlab中根号表示怎么操作?根号表示教程分享

最近很多网友表示自己不清楚Matlab中根号表示的操作&#xff0c;而本篇文章就来给大家讲解Matlab中根号表示的教程介绍&#xff0c;大家都来一起学习吧。 Matlab中根号表示的教程介绍 常数根号的表示方法 1、打开matlab&#xff0c;在命令行窗口中输入“9^0.5”&#xff0c;按回…

matlab中根号的表示方法,Matlab中根号表示方法分享

现在许多朋友都已经安装使用Matlab这款软件&#xff0c;但不少伙伴使用过程里还不会根号表示方法&#xff0c;那么究竟是如何操作的呢&#xff1f;今日就来下文看看Matlab中根号表示教程吧。 常数根号的表示方法 1、打开matlab&#xff0c;在命令行窗口中输入9^0.5&#xff0c;…

记Git报错-refusing to merge unrelated histories

环境 系统&#xff1a;win10 git version 2.9.0.windows.1 创建一个新的分支&#xff0c;很久没用了。要重新启用&#xff0c;拉取最新分支的代码&#xff0c;结果报错&#xff1a;refusing to merge unrelated histories fatal: refusing to merge unrelated histories 解…

git: refusing to delete the current branch

最近&#xff0c;不知怎么操作&#xff0c;导致远程test分支无法删除。 原因是&#xff0c;远程仓库里的当前分支是test。进入远程仓库目录&#xff0c;git branch。由于已经解决&#xff0c;所以没有图。在网上找相关资料&#xff0c;都是github里面的操作。但是这个是自己搭建…