web网站的任意文件上传下载漏洞解析

免责申明

        本文仅是用于学习检测自己搭建的任意文件上传下载漏洞相关原理,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国家地区相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 如您继续阅读该文章即表明您默认遵守该内容。

一、任意文件上传漏洞

1.1、任意文件上传漏洞介绍

        大部分的Web网站都拥有文件上传文件的接口(允许上传图片、视频、头像、文档等其他类型的文件到服务器上);但是如果Web网站的开发人员并没有对上传的文件相关参数、内容信息进行严格的过滤防护,未对安全进行考虑;那么攻击者就可以通过一些方法将恶意文件上传到服务器上,然后通过上传的恶意文件来访问甚至控制整个服务器。

        一般来说攻击者上传的恶意文件被称为网页后门(即WebShell)是一种木马程序,该后门的功能非常强大(可以进行查看服务器目录、服务器文件、执行系统命令、拉取或删除服务器文件等操作)。

1.2、任意文件上传漏洞测试流程

        Web网站中只要是有文件上传的位置都可以用来测试是否存在漏洞。

 1.3、任意文件上传漏洞绕过方式

任意文件上传漏洞测试方式
检测文件类型位置说明
前端js校验绕过

1、针对前端对上传文件类型的校验,检查html元素直接将校验的js事件删除掉再测试上传文件(可通过火狐浏览器删除、谷歌和Edge浏览器好像不支持)

2、将我们需要上传的webshell文件复制一份,然后将复制的文件后缀类型修改为Web网站支持的后缀类型(如.jpg或.png),此时我们再上传修改了后缀的webshell文件,在点击上传按钮前开启抓包,抓取到包后将文件的后缀名称修改为webshell真实的后缀名称,放行即可上传文件

后端校验绕过

1、检查上传文件后缀

检查文件后缀也就是对文件类型的检验,我们可以采用黑名单、白名单的方式绕过:

《1》黑名单:指Web开发人员在编写文件上传功能对文件后缀进行校验功能编写的时候,直接将类似(.php、.asp、.aspx、.jsp)后缀内容直接加入黑名单,不然这类格式的文件上传到服务器上【这种黑名单过滤方式有缺陷,很容易绕过((如:后缀大小写混合、修改后缀名为php3、php5方法即可绕过))】。

2、检查上传文件内容

《1》MIME类型检查(MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型;主要用于设定某种扩展名的文件用一种应用程序来打开的方式类型。

【每个MIME类型由两部分组成:前面是数据的大类别、后面是具体的种类】)

常见 MIME 类型列表 - HTTP | MDN (mozilla.org)icon-default.png?t=O83Ahttps://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

# 常见的MIME类型如下:
application/octet-stream    //任意类型的二进制数据
application/json            //json字符串数据
text/xml                    //xml文档(.xml)
text/html                   //超文本标记标记语言内容(.html\.htm)
text/plain                  //普通文本(.txt)
application/pdf             //pdf文档(.pdf)
application/msword          //word文档(.word)
image/jpeg                  //jpeg图片(.jpg\.jpeg)
image/png                   //png图片(.png)
image/gif                   //gif图片(.gif)
video/mpeg                  //MPEG文件(.mpeg\.mpg)
video/x-msvideo             //AVI文件(.avi)
application/x-gzip          //GZIP文件(.gz)

绕过MIME类型检查的方法就是使用抓包工具去上传文件的包,然后将【Content-Type】内容修改为支持的MIME类型即可。

《2》代码使用getimagesize() 函数检查文件内容(getimagesize() 是php的一个函数,用于获取图像大小及相关信息,成功返回一个数组,失败则返回FALSE 并产生一条 E_WARNING 级的错误信息)

# 绕过getimagesize()函数的三种方法:
1、直接伪造头部GIF89A;
2、CMD方法,copy /b test.png+1.php webshell.png(将需注入的文件与正常的文件合并为一个文件);
3、直接使用工具增加备注写入一句话木马(在正常文件后面添加木马内容);

1.4、以upload-labs为例进行说明上传文件漏洞绕过方式

GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场icon-default.png?t=O83Ahttps://github.com/c0ny1/upload-labs可以使用phpStudy搭配upload-labs搭建环境进行绕过测试学习任意文件上传漏洞(安装好pypStudy2016后直接将upload-labs内容放到phpStudy2016的网站根目录(www)下即可)如下图所示:

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

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

相关文章

【D3.js in Action 3 精译_023】3.3 使用 D3 将数据绑定到 DOM 元素

当前内容所在位置: 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可视化最佳实践(下)1.4 本…

Three.js 3D人物漫游项目(中)

本文目录 前言最终效果展示1、人物添加阴影1.1 添加地板1.1.1 效果 1.2 模型castShadow1.2.1 效果 1.3 轨道控制器1.3.1 效果 2、创建建筑物2.1 代码2.2 效果 前言 在数字技术的浪潮中,三维图形渲染技术以其独特的魅力,正逐步渗透到我们生活的方方面面&a…

手机、平板电脑编程———未来之窗行业应用跨平台架构

一、平板编程优点 1. 便携性强 - 可以随时随地携带平板进行编程,不受地点限制,方便在旅行、出差或休息时间进行学习和开发。 2. 直观的触摸操作 - 利用触摸屏幕进行代码编辑、缩放、拖动等操作,提供了一种直观和自然的交互方式。 …

联想(lenovo) 小新Pro13锐龙版(新机整理、查看硬件配置和系统版本、无线网络问题、windows可选功能)

新机整理 小新pro13win10新机整理 查看硬件配置和系统版本 设置-》系统-》系统信息 无线网络问题 部分热点可以,部分不可以 问题:是因为自己修改了WLAN的IP分配方式为手动分配,导致只能在连接家里无线网的时候可以,连接其他…

Unity 高亮插件HighlightPlus介绍

主要是对官方文档进行了翻译(我做了一些补充和一些小的调整) 但是如果你只是想快速入门: Unity 高亮插件Highlight Plus快速入门-CSDN博客 注意:官方文档本身就落后实际,但对入门仍很有帮助,核心并没有较大改变,有的功能有差异,以实际为准.(目前我已校正了大部分差异,后续我…

vue3 自定义el-tree树形结构样式

这里样式设置主要用到了 windcss 实现效果 模拟数据 这里也可以用模拟的数据,下面用的是后端请求的真实数据 [{"id": 5,"rule_id": 0,"status": 1,"create_time": "2019-08-11 13:36:09","update_time": "…

微信小程序拨打电话点取消报错“errMsg“:“makePhoneCall:fail cancel“

问题:微信小程序中拨打电话点取消,控制台报错"errMsg":"makePhoneCall:fail cancel" 解决方法:在后面加上catch就可以解决这个报错 wx.makePhoneCall({phoneNumber: 181********}).catch((e) > {console.log(e) //用…

金钥匙系列:Kubernetes (K8s) 服务集群技术栈学习路线

维护Kubernetes (K8s) 服务集群是一个复杂且多层次的技术任务,涉及容器化技术、集群管理、网络、安全、监控等多个领域。为了成为一名优秀的K8s集群维护工程师,技术栈需要广泛且深入。本文将为你详细介绍从零开始到深入掌握K8s集群维护的职业技术栈学习路…

在MAC中Ollama开放其他电脑访问

ollama安装完毕后默认只能在本地访问,之前我都是安装其他的软件之后可以结合开放其他端口访问,其实是可以新增或修改下电脑的系统配置,就可以打开端口允许除本机IP或localhost访问。 步骤如下: 1、查看端口(默认是&…

使用 Anaconda 环境在Jupyter和PyCharm 中进行开发

目录 前言 一、在特定环境中使用jupyter 1. 列出所有环境 2. 激活环境 3. 进入 Jupyter Notebook 二、在特定环境中使用pycham 1. 打开 PyCharm 2. 打开设置 3. 配置项目解释器 4. 选择 Conda 环境 5. 应用设置 6. 安装所需库(如果需要) 总结 &#x1f3…

大模型爬虫—ScrapeGraphAI

大模型爬虫—ScrapeGraphAI 一、介绍 ScrapeGraphAI是一个网络爬虫 Python 库,使用大型语言模型和直接图逻辑为网站和本地文档(XML,HTML,JSON 等)创建爬取管道。 只需告诉库您想提取哪些信息,它将为您完成! scrapegraphai有三种主要的爬取管道可用于从网站(或本地文…

统信服务器操作系统【搭建FTP】设置介绍

如何在操作系统上安装vsftp服务。设置匿名用户登录、设置授权用户密码访问功能,并介绍使用匿名方式、授权用户方式访问vsftp服务。本文适用于A、D、E三个服务器操作系统版本,除安装方式的差异,其他设置均相同。 文章目录 功能概述一、功能介绍二、准备环境三、安装步骤1. 在…

(undone) 学习语音学中关于 i-vector 和 x-vector

来源:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8461375 (这是一篇跟 X-vector 有关的论文) 这里有更适合初学者的两个资料: 1.https://www.youtube.com/watch?vR3rzN6JYm38 (MIT教授的youtube视频) 2.https://people.c…

linux 基础(一)mkdir、ls、vi、ifconfig

1、linux简介 linux是一个操作系统(os: operating system) 中国有没有自己的操作系统(华为鸿蒙HarmonyOS,阿里龙蜥(Anolis) OS 8、百度DuerOS都有) 计算机组的组成:硬件软件 硬件:运算器&am…

数据结构和算法之树形结构(1)

文章出处: 数据结构和算法之树形结构(1) 关注码农爱刷题,看更多技术文章!! 树形结构是数据结构四种逻辑结构之一,也是被广泛使用的一种逻辑结构,它描述的是数据元素之间一对多的逻辑关系。树是一种非线性的数据结构&a…

初识模版!!

初识模版 1.泛型编程1.1 如何实现一个交换函数呢(使得所有数据都可以交换)?1.2 那可以不可以让编译器根据不同的类型利用该模子来生成代码呢? 2.模版类型2.1 模版概念2.2 函数模版的原理2.3 函数模板的实例化2.4 模板参数的匹配原…

如何优化前端页面的 AJAX 请求性能并避免冲突

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

开源 AI 智能名片 S2B2C 商城小程序与正能量融入对社群归属感的影响

摘要:本文探讨了开源 AI 智能名片 S2B2C 商城小程序在社群运营中的作用,以及融入正能量对提高社群归属感的关键意义。通过分析正能量的精神感染力和对社群氛围的积极影响,阐述了在开源 AI 智能名片 S2B2C 商城小程序的各类活动中融入正能量的…

flask项目初始化

1、初始环境 python3.8 2、flask文档地址:https://flask.palletsprojects.com/en/latest/installation/#install-flask 3、初始化项目 $ mkdir myproject $ cd myproject $ python3 -m venv .venv $ . .venv/bin/activate $ pip install Flask4、打开项目mypr…

Ansible——Playbook基本功能???

文章目录 一、Ansible Playbook介绍1、Playbook的简单组成1)“play”2)“task”3)“playbook” 2、Playbook与ad-hoc简单对比区别联系 3、YAML文件语法:---以及多个---??使用 include 指令 1. 基本结构2. 数…