Web安全:文件上传漏洞详解,文件上传漏洞原理、绕过方式和防御方案。

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等12个知识域的一百多个知识点,持续更新。

在这里插入图片描述

文件上传漏洞是指:用户通过「文件上传功能」,上传「可执行脚本」文件到服务器本地,拿到服务器「权限」

漏洞形成的核心在于:网站对上传的文件过滤不够严谨。

因此,我们学习的重点要放在:文件过滤的方式,以及如何绕过这些过滤!

文件上传漏洞

  • 1、前端绕过
  • 2、MIME类型绕过
  • 3、后缀名绕过
  • 4、.htaccess绕过
  • 5、点绕过
  • 6、防御

1、前端绕过

1)程序员在「前端」使用「JS代码过滤」上传的文件,过滤成功以后,再向后端发送请求,代码逻辑示例:

//JS检查文件类型(大概逻辑)
function checkFile() {//定义允许上传的文件类型var allow_ext = ".jpg|.png|.gif";//文件类型不满足时,返回false,并弹窗if(){alert(errMsg);return false;}
}

2)我们可以根据页面是否「向后台发送请求」,来判断前端是否有过滤。

当页面发送请求时,浏览器左下角的状态栏会「显示请求链接」(显示状态栏功能,默认开启),上传文件失败时,如果左下角不显示链接,就说明前端有过滤;如果左下角显示链接,就说明前端没有过滤(或者前端过滤已经被绕过)。

在这里插入图片描述

3)绕过前端过滤的方式有两种:

  1. 「浏览器禁用JS」(JS代码不起作用,但也会导致其他正常的JS功能也不能用)
  2. 「抓包」修改文件后缀(比如上传一个jpg文件,抓包修改成php文件)

对应的练习靶场: Upload LABS Pass-1

练习靶场下载:https://github.com/c0ny1/upload-labs

靶场搭建可参考 PhpStudy下载安装使用教程


2、MIME类型绕过

浏览器通过「MIME类型」(而不是文件扩展名)来标识文件的类型,也就是http请求头中的 Content-Type 字段,内容为 image/jpegimage/pngimage/gif 时,表示文件是图片类型。

1)程序员通过请求的MIME类型,判断是否为图片类型,代码逻辑示例:

//MIME类型过滤(大概逻辑)
if($_FILES['upload_file']['type'] == 'image/jpeg'){//上传文件到upload路径
} else {//提示文件类型不正确
}

2)我们可以抓包修改 Content-Type 字段的值为 image/jpegimage/pngimage/gif ,进行绕过。

​​​​​​​​在这里插入图片描述

对应的练习靶场: Upload LABS Pass-2


3、后缀名绕过

1)程序员通过「后缀名黑名单」,禁止上传指定类型的文件,代码逻辑示例:

# 获取上传的文件名
$file_name = trim($_FILES['upload_file']['name']);
# 定义黑名单
$deny_ext = array('.asp','.aspx','.php','.jsp');
# 判断上传的文件
if(!in_array($file_ext, $file_name)) {# 如果不在黑名单中,就上传文件。
} else {# 如果在黑名单中,就弹窗提示,禁止上传。$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
}

2)我们可以把文件后缀名改成黑名单之外的格式,绕过过滤。

绕过黑名单上传成功后,需要能够「解析」这类文件才能使用,是否能够解析取决于Apache配置文件中有没有添加这些后缀名。

比如:你想让Apache能够解析 .phtml.php5.phps.pht,就在Apache的httpd.conf需配置 AddType application/x-httpd-php .php .phtml .php5

常见的可执行脚本后缀名如下:

  1. .php.php1.php2.php3.php4.php5.pht.phps.phtml
  2. .asp.aspx.asa.asax、.ascx.ashx.asmx
  3. .jsp.jspa.jspx.jsw.jsv.jspf.jtml
  4. .html.htm
  5. .cer.swf.ini

对应的练习靶场:

Upload LABS Pass-5
Upload LABS Pass-6
Upload LABS Pass-8
Upload LABS Pass-9
Upload LABS Pass-10
Upload LABS Pass-11

4、.htaccess绕过

.htaccess是Apache的分布式配置文件,可以让当前目录下的文件当做php文件执行。

使用前提:

  1. Apache的http.conf配置 AllowOverride ALL 以及 AccessFileName .htaccess
  2. 未过滤.htaccess文件,且上传后不修改文件名,也就是说,文件名必须是.htaccess才会生效。

1)我们先上传一个 .htaccess,内容为:

<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

代码的意思是,让当前目录下的shell.jpg当做php文件执行。
再上传一个 shell.jpg,内容为一句话木马 <?php eval($_GET['shell']);?>,访问shell.jpg文件即可。

对应的练习靶场: Upload LABS Pass-4

5、点绕过

Windows系统为了保证文件命名的规范性,会把文件名末尾的点删掉。

我们在上传文件时抓包,在文件名默认加上点,比如 xx.php.
后端过滤时会把 php.当做文件后缀名,从而绕过很多过滤;
文件上传成功落地时,系统的命名机制删掉末尾的点,变成 xx.php,文件就能正常执行了。

Upload LABS Pass-7

6、防御

文件上传漏洞的防护有三个方向,分别是文件名、文件内容和权限

  1. 「文件名」包括过滤「文件后缀名」,修改上传后的文件名(比如基于时间的随机字符串),同时禁止「文件路径」对外展示。
  2. 「文件内容」主要是针对图片马,对文件进行「二次渲染」,这是最变态的一种方式,可以避免大部分文件上传漏洞。
  3. 其次是「权限」「文件上传目录」取消执行权限,使上传的脚本不能执行。

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

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

相关文章

Java实现链表

链表 前言一、链表的概念及结构二、链表的分类三、链表的实现无头单向非循环链表实现无头双向链表实现具体代码 四、链表习题五、顺序表和链表的区别 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这个网站里内容讲解通俗易懂且风趣幽默&#xff0c;对我…

51单片机-实机演示(单多个数码管)

仿真链接&#xff1a; http://t.csdnimg.cn/QAPhx 目录 一.引脚位置 二.多个显示 三 扩展 一.引脚位置 注意P00 - >A ; 这个多个的在左边,右边的A到B是控制最右边那个单个的. 接下来上显示单个的代码 #include <reg52.h> #include <intrins.h> #define u…

大字体学生出勤记录系统网页HTML源码

源码介绍 上课需要一个个点名记录出勤情况&#xff0c;就借助AI制作了一个网页版学生出勤记录系统&#xff0c; 大字体显示学生姓名和照片&#xff0c;让坐在最后排学生也能看清楚&#xff0c;显示姓名同时会语音播报姓名&#xff0c; 操作很简单&#xff0c;先导入学生姓名…

嵌入式学习 (Day:27 IPC --- 进程间通信)

IPC 进程间通信 interprocess communicate &#xff08;即&#xff1a;进程间进行数据交换&#xff09; 三大类&#xff1a; 进程间通信的方式&#xff08;共8种&#xff09; 1、古老的通信方式&#xff08;Linux设计时就有的&#xff09; 无名管道 有名…

用源码建站可能涉及知产侵权,建站的注意!

近日普推知产老杨看到央视报道一家公司用了某建站源码涉及知产侵权&#xff0c;起诉了全国八千多家公司&#xff0c;某梦自从创始人因病转给某公司后&#xff0c;也在大量起诉用其建站代码公司侵权&#xff0c;他们也都是申请了相关的著作权。 有的中小企业在运营中会涉及建站…

c++ 将指针转换为 void* 后,转换为怎么判断原指针类型?

当将指针转换为void后&#xff0c;擦除了指针所指向对象的类型信息&#xff0c;因此无法通过void指针来判断原始指针的类型。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个…

【面试题】JavaScript基础高频面试(下)

10、Javascript 闭包是什么,闭包形成的原因和闭包的用途 &#xff1f; 闭包&#xff08;Closure&#xff09;是 JavaScript 中的一个非常重要的概念。简单地说&#xff0c;闭包就是一个函数能够访问另一个函数的作用域。这是因为在 JavaScript 中&#xff0c;函数是一等公民&a…

Oracle直接路径读解析

目录 一、直接路径读概念二、直接路径读在OLTP和OLAP环境中的不同点三、如何禁止直接路径读方法1&#xff1a;使用事件设置方法2&#xff1a;使用隐含参数 一、直接路径读概念 直接路径读&#xff08;Direct Path Read&#xff09;是Oracle数据库中的一种数据读取机制&#xf…

10编码(数据转化为信号)

目录 数据转化为信号 数字数据编码为数字信号&#xff1a; 数字数据调制为模拟信号&#xff1a; 模拟数据编码为数字信号&#xff1a; 模拟数据调制为模拟信号&#xff1a; 数据转化为信号 数据转化为数字信号要通过编码&#xff0c;转化为模拟信号通过调制 数据又分为数字…

PXI总线测试模块-6939 矢量信号发生器

频率范围&#xff1a;250kHz&#xff5e;6GHz 6939 矢量信号发生器 6939矢量信号发生器提供频率范围250kHz~6GHz的多制式信号&#xff0c;单边带相位噪声优于-120dBc/Hz10kHz&#xff08;载波1GHz&#xff09;、EVM优于1.0%&#xff0c;能够实现高纯连续波输出、模拟调制信号输…

Linux: network: TCP: zero window size/window full 示例

最近遇到一个问题,当前机器的CPU使用率非常高,然后导致其中一个程序处理socket的数据过慢,然后出现下面的zero的示例。 下面是在接收buff用光的时候,发出的 TCP zeroWindows的消息 这种问题就是内存,CPU,网速之间的性能取舍。具体解决的话,需要看具体的需要是什么样的?…

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 目前&#xff0c;模型最全的网站是HuggingFace&#xff0c;但是国内需要魔法流量才能访问。另外&#xff0c;现在大模型权重文件都较大&#xff0c;也会浪费不少流量&#xff0c;因此这里推荐使用魔搭社区下…

Spring+SpringBoot面试总结(近两万字)

SpringSpringBoot面试总结 一、Spring Bean1.1、bean的生命周期&#xff08;对象的创建使用销毁&#xff09;1.1.1、准备工作1.1.2、创建Bean对象1.1.3、注册销毁 1.2、 bean的作用域1.2.1、配置方式 1.3、 spring 自动装配 bean 有哪些方式&#xff08;存疑存疑&#xff09;1.…

2024年上半年软件设计师试题及答案(回忆版)--案例题

案例题 1.缺陷识别的数据流图 摄像机原始图像 缺陷识别,特征值,颜色、纹理,是否缺陷,缺陷类型 识别结果 数据导出,供检测识别系统模型积累、训练 系统管理,质量员配置系统参数 1.实体 2.存储 3.面向对象的分析与面向对象的设计2个阶段的模型区别 4.数据组成 2.球队、…

软件测试金字塔,对号入座,你在哪层?

自从学习了软件测试,脑袋也清晰了,目标也明确了,就是不知道学到哪里了.中间有很多的困难也有很多成就感,你目前在那个阶段呢? 初级测试工程师 技能要求:需求分析,使用等价类边界值等方法进行用例设计,执行功能测试,发现提交跟踪bug,使用禅道,会在测试中会操作数据库进行检查和…

数学建模--LaTeX的基本使用

目录 1.回顾 2.设置这个页眉和页脚 3.对于字体的相关设置 4.对于这个分级标题的设置 5.列表的使用 6.插入图片 1.回顾 &#xff08;1&#xff09;昨天我们了解到了这个latex的使用基本常识&#xff0c;以及这个宏包的概念&#xff0c;区域的划分&#xff0c;不同的代码代…

电磁仿真--CST综合建模练习1

1. 简介 本文展示一个CST自带的示例&#xff0c;在三维空间中使用带线计算传输线的S参数。基板顶部的带线通过小圆柱连接到底部的短带线&#xff0c;以便绕过可能存在的障碍。 结构生成 该结构完全通过参数输入进行建模&#xff0c;参考波长为10毫米&#xff0c;因此可以轻松…

JavaWeb开发 1.Web开发 介绍

我的生命是一万次的春和景明 —— 24.5.27 一、什么是Web Web&#xff1a; 全球广域网&#xff0c;也称为万维网(www World Wide Web)&#xff0c;能够通过浏览器访问的网站 Web网站的工作流程 学习流程

kafka的安装

windows下kafka的安装 【Kafka】Windows下安装Kafka&#xff08;图文记录详细步骤&#xff09;_windows安装kafka-CSDN博客 kafka生产消息 kafka消费消息

​​​【收录 Hello 算法】10.6 小结

10.6 小结 二分查找依赖数据的有序性&#xff0c;通过循环逐步缩减一半搜索区间来进行查找。它要求输入数据有序&#xff0c;且仅适用于数组或基于数组实现的数据结构。暴力搜索通过遍历数据结构来定位数据。线性搜索适用于数组和链表&#xff0c;广度优先搜索和深度优先搜索…