新冠确诊阳性后的第二篇博客,一文带你学习文件上传漏洞

news2024/11/18 20:34:30

新冠确诊阳性后的第二篇博客,一文带你学习文件上传漏洞

  • 1.什么是文件上传漏洞
  • 2.不要使用黑名单规定上传文件类型
  • 3.绕过文件上传检查功能
  • 4.Apache文件解析问题
  • 5.IIS文件解析问题
  • 6.设计安全的文件上传功能

1.什么是文件上传漏洞

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,有时候几乎没有什么技术门槛。

在大多数情况下,文件上传漏洞一般都是指“上传Web脚本能够被服务器解析”的问题,也就是通常所说的webshell的问题


2.不要使用黑名单规定上传文件类型

FCKEditor是一款非常流行的富文本编辑器,为了方便用户,它带有一个上传文件功能,但是这个功能却出过许多次漏洞。

它是通过检查文件的后缀来确定是否安全的。代码如下:

$Config['AllowedExtensions']['File'] = array() ; //允许上传的类型
$Config['DeniedExtensions']['File'] =
array('php', 'php3', 'php5', 'phtml', 'asp', 'aspx', 'ascx', 'jsp', 'cfm', 'cfc', 'pl', 'bat', 'e
xe', 'dll', 'reg', 'cgi') ; //禁止上传的类型

以这个黑名单为例,如果我们上传后缀为php2、php4、inc、pwml、asa、cer等的文件,都可能导致发生安全问题。

这就引发了很大的安全隐患!


3.绕过文件上传检查功能

在针对上传文件的检查中,很多应用都是通过判断文件名后缀的方法来验证文件的安全性的。但是在某些时候,如果攻击者手动修改了上传过程的POST包,在文件名后添加一个%00字节,则可以截断某些函数对文件名的判断。

在许多语言的函数中,比如在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符🍟

比如应用原本只允许上传JPG图片,那么可以构造文件名(需要修改POST包)为xxx.php[\0].JPG,其中[\0]为十六进制的0x00字符,.JPG绕过了应用的上传文件类型判断;但对于服务器端来说,此文件因为0字节截断的关系,最终却会变成xxx.php

除了常见的检查文件名后缀的方法外,有的应用,还会通过判断上传文件的文件头来验证文件的类型

比如一个JPG文件,其文件头是:

在这里插入图片描述

常见的攻击技巧是伪造一个合法的文件头,而将真实的PHP等脚本代码附在合法的文件头之后

在这里插入图片描述


4.Apache文件解析问题

在Apache 1.x、2.x中,对文件名的解析就存在以下特性。

Apache对于文件名的解析是从后往前解析的,直到遇见一个Apache认识的文件类型为止。比如:

Phpshell.php.rar.rar.rar.rar.rar

因为Apache不认识.rar这个文件类型,所以会一直遍历后缀到.php,然后认为这是一个PHP类型的文件。

Apache的这个特性,很多工程师在写应用时并不知道,即便知道,可能有的工程师也会认为这是Web Server该负责的事情。如果不考虑这些因素,写出的安全检查功能可能就会存在缺陷。比如.rar是一个合法的上传需求,在应用里只判断文件的后缀是否是.rar,最终用户上传的是phpshell.php.rar.rar.rar,从而导致脚本被执行。


5.IIS文件解析问题

前面提到的0x00字符截断文件名,在IIS和Windows环境下曾经出过非常类似的漏洞,不过截断字符变成了分号“;

例如:当文件名为abc.asp; xx.jpg时,IIS 6会将此文件解析为abc.asp,文件名被截断了,从而导致脚本被执行

除此漏洞外,在IIS 6中还曾经出过一个漏洞,因为处理文件夹扩展名出错,导致将/*.asp/目录下的所有文件都作为ASP文件进行解析。比如:

http://www.target.com/path/xyz.asp/abc.jpg

这个abc.jpg,会被当做ASP文件进行解析,这很危险!

谈到IIS,就不得不谈在IIS中,支持PUT功能所导致的若干上传脚本问题

在IIS中,如果目录支持写权限,同时开启了WebDav,则会支持PUT方法,再结合MOVE方法,就能够将原本只允许上传文本文件改写为脚本文件,从而执行webshell。MOVE能否执行成功,取决于IIS服务器是否勾选了“脚本资源访问”复选框

一般要实施此攻击过程,攻击者应先通过OPTIONS方法探测服务器支持的HTTP方法类型,如果支持PUT,则使用PUT上传一个指定的文本文件,最后再通过MOVE改写为脚本文件。

  • 第一步:通过OPTIONS探测服务器信息。
    在这里插入图片描述
    返回:
    在这里插入图片描述
  • 第二步:上传文本文件。
    在这里插入图片描述
    返回:
    在这里插入图片描述
  • 第三步:通过MOVE改名。
    在这里插入图片描述
    返回:
    在这里插入图片描述
    修改成功!

6.设计安全的文件上传功能

文件上传的目录设置为不可执行:🍟

只要Web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此此点至关重要。在实际应用中,很多大型网站的上传应用,文件上传后会放到独立的存储上,做静态文件处理,一方面方便使用缓存加速,降低性能损耗;另一方面也杜绝了脚本执行的可能。但是对于一些边边角角的小应用,如果存在文件上传功能,则仍需要多加关注。

判断文件类型:🙌

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单的方式。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

使用随机数改写文件名和文件路径:🥯

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用使用随机数改写了文件名和路径,将极大地增加攻击的成本。与此同时,像shell.php.rar.rar这种文件,或者是crossdomain.xml这种文件,都将因为文件名被改写而无法成功实施攻击。

单独设置文件服务器的域名:👌

由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含JavaScript的XSS利用等问题将得到解决。但能否如此设置,还需要看具体的业务环境。

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

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

相关文章

RabbitMQ管理界面

🍁博客主页:👉不会压弯的小飞侠 ✨欢迎关注:👉点赞👍收藏⭐留言✒ ✨系列专栏:👉Linux专栏 🔥欢迎大佬指正,一起学习!一起加油! 目录&…

记录我の秋招之旅【23届 CV算法岗】

文章目录碎碎念春招实习华为实习魔幻秋招尘埃落定碎碎念 今年(2022年)的秋招不能说"非常困难"吧,只能说是"地狱难度",相信参与或者从侧面了解过的同学们也能感同身受。从今年的三月份开始着手秋招,期间也一直忙着实验室…

【基于Transformer和可逆神经网络】

Effective Pan-Sharpening With Transformer and Invertible Neural Network (基于Transformer和可逆神经网络的有效泛锐化) 可逆神经网络1 可逆神经网络2 在遥感成像系统中,全色锐化是从高分辨率全色图像及其对应的低分辨率多光谱图像获得…

30岁之后想转行,可行吗?这20条建议让你少走弯路!

都说三十而立,可眼看着到了意气风发的年龄,却突然意识到自己仍一事无成,甚至连养活自己都是问题。30多岁,大多数人还要开始买房、买车、结婚生子,养家糊口,于是各种压力逼迫之下,就想到了转行&a…

移动硬盘中安装ubuntu系统——Vmware Workstation安装

一. 简介 对于一个程序开发者来说,电脑系统开发环境非常重要。要使用相同的系统环境,可以的方式有:1、携带电脑,2、携带安装了系统的移动硬盘。相比来说,第二种方式更理想,如果是第一种方式携带电脑的话&a…

基于java+springboot的民宿预订信息网站-计算机毕业设计

运行环境 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven 项目介绍 随着国民生…

大学没有学好专业,毕业如何转行?

大学颓废度过,毕业工作一无所长,颠沛流离! 本人17届某二流专科毕业,模具设计与制造专业。其实对模具毫无兴趣,只怪当初没有主见听从没有出过县城的老爸的命令选择了模具这个专业。大学期间上课睡觉玩手机,…

2023年元旦倒计时案例

文章目录基于HTML实现2023年倒计时代码实现基于HTML实现2023年倒计时 代码实现 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>2023倒计时</title> <!-- <link rel"stylesheet" href"sty…

傻白探索Chiplet,Chiplet的通信结构(八)

目录 一、SoC总线结构 二、NoC结构 2.1 NoC层次 2.2 NoC基本组成和属性 2.3 NoC常见的拓扑结构 2.3.1 2D Mesh 2.3.2 2D Torus 2.3.3 3D Mesh 2.3.4 Octagon/Spidergon结构 2.3.5 Cluster Mesh结构 2.3.6 树状结构 2.3.7 蝶状结构 2.4 各种结构之间的比较 2.5 …

网络技术期末复习~基础理论题

问题1.1试述五层协议的网络体系结构的要点&#xff0c;包括各层的主要功能。 解&#xff1a; 物理层&#xff1a;传输比特流。 数据链路层&#xff1a;传送以帧为单位的数据&#xff0c;实现网络中相邻两个节点直接的连接。 网络层&#xff1a;提供主机间的通信服务。&…

【小学信息技术教资面试】《数据计算》教案

1.题目&#xff1a;数据计算 2.内容&#xff1a; 3.基本要求 &#xff08;1&#xff09;掌握公式和函数的使用方法。 &#xff08;2&#xff09;试讲中体现学生的参与性。 &#xff08;3&#xff09;配合板书讲解。 《数据计算》教案 一、教学目标 1.了解公式的组成&#x…

Hadoop综合项目——二手房统计分析(起始篇)

Hadoop综合项目——二手房统计分析&#xff08;起始篇&#xff09; 文章目录Hadoop综合项目——二手房统计分析&#xff08;起始篇&#xff09;0、 写在前面1、项目背景与功能1.1 项目背景1.2 项目功能2、数据集和数据预处理2.1 数据集2.2 数据预处理2.2.1 字段空值处理2.2.2 无…

计算机毕设Python+Vue养生知识平台(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

浅析在线教育行业发展所面临的困境

2013年&#xff0c;在线教育行业悄然兴起&#xff0c;一时间引发讨论。到新冠疫情期间&#xff0c;受到疫情和政策的双重抨击&#xff0c;线下教育行业遭到重创&#xff0c;又有更多人开始关注到并开始看好在线教育。作为技术发展下的产物&#xff0c;在线教育跨越了时间、空间…

【小学信息技术教资面试】《认识Windows程序窗口》教案

1.题目&#xff1a;认识Windows程序窗口 2.内容&#xff1a; 3.基本要求&#xff1a; &#xff08;1&#xff09;学生掌握改变窗口大小和位置的方法。 &#xff08;2&#xff09;教学中注意师生间的交流互动。 &#xff08;3&#xff09;让学生明白Windows窗口组成。 《认识W…

超标量处理器设计——第七章_寄存器重命名

超标量处理器设计——第七章_寄存器重命名 参考《超标量处理器》姚永斌著 文章目录超标量处理器设计——第七章_寄存器重命名7.1 简述7.2 寄存器重命名方式7.2.1 用ROB进行寄存器重命名7.2.2 扩展ARF进行寄存器重命名7.2.3 使用统一的PRF进行寄存器重命名7.3 重命名映射表&…

UI 自动化测试实战(二)| 测试数据的数据驱动

关注公众号&#xff0c;获取测试开发实战干货合辑。本文节选自霍格沃兹《测试开发实战进阶》课程教学内容&#xff0c;进阶学习文末加群。 数据驱动就是通过数据的改变驱动自动化测试的执行&#xff0c;最终引起测试结果的改变。简单来说&#xff0c;就是参数化在自动化测试中的…

企业生产管理必备模板,助力企业数字化转型

如今企业在市场经济中快速发展&#xff0c;不少企业在市场中得到了更好的发展机遇。然而机遇与挑战往往是共存的&#xff0c;市场同时也给制造企业生产方面提出了更高要求——企业需要在产品结构优化、生产系统改良以及运作模式创新的基础上&#xff0c;注重管理思维模式的改进…

【实时数仓】DWM层订单宽表之维表关联优化 -- 异步查询

文章目录一 DWM层-订单宽表1 维表关联代码实现&#xff08;1&#xff09;优化2&#xff1a;异步查询a 封装线程池工具类b 封装维度异步查询的函数类DimAsyncFunctionc 自定义维度查询接口DimJoinFunctiond 使用DimAsyncFunction关联用户维度源码测试配置配置表历史数据同步总结…

构建Web应用程序哪个最好:PHP,Python还是Ruby?

在本文中&#xff0c;我们将了解哪种PHP&#xff0c;Python和Ruby最适合构建Web应用程序。 什么是 Python&#xff1f; Python 是一种具有动态语义的解释型、面向对象的高级编程语言。其高级内置数据结构&#xff0c;以及动态绑定和动态类型&#xff0c;使其特别适合用作脚本…