pikachu靶场-7 不安全的文件下载和上传

news2024/11/23 15:48:39

不安全的文件下载和上传

不安全的文件下载

文件下载(unsafedownload)漏洞概述

很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。

但是,如果文件下载功能设计不当,则可能会导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感文件。

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如…/…/…/etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!

靶场

image-20221212162110385

我们右键名字,新标签页中打开链接,可以发现自动将图片下载了,我们从URL里可以看到请求,它其实就是把kb.png这么一个filename传到了后台,后台就去找这个文件,把这个文件读取后,又响应到前端,浏览器就可以把它下载下来了这么一个过程。如果说后端的代码控制不够严格,这个地方很有可能就出现漏洞了。

一般来说测试这种文件下载漏洞呢,我们可以通过目录遍历的方式

image-20221212163701311

主要我们输入足够多的…/你其实是可以跳转到根目录下的,然后我们可以以根目录为起点往下去做相关的读取

比如这样:

image-20221212163938680

我们就会把hosts文件下载下来了

image-20221212163952024

这个其实就是后端对我们传入进去的文件名对应的文件进行读取的时候它的控制不够严格,就导致了恶意文件下载这么一个漏洞

我们来看一下后台源码:

image-20221212164332236 image-20221212164433577

这里最根本的原因就是它对前端传进来的文件没有做任何判断。它不会对这个文件判断是不是它目录下的就对它进行读取。当前端传进来一个文件名,它应该对这个文件名进行校验,判断这个文件名是否在被下载的文件范围内,不在就告诉文件不存在,在的话就下载,这样才不会有问题。

防范措施

  1. 对传入的文件名进行严格的过滤和限定;
  2. 对文件下载的目录进行严格的规定;

不安全的文件上传

文件上传(unsafeupload)漏洞解析

因为业务功能需要,很多web站点都有文件上传的接口,比如:

  1. 注册时上传头像图片(比如jpg,png,gif等);
  2. 上传文件附件(doc,xls等);

而在后台开发时并没有对上传的文件功能进行安全考虑或者采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件(如:一句话木马)。从而通过对该恶意文件的访问来控制整个web后台。

文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:

  • 验证文件类型、后缀名、大小;
  • 验证文件的上传方式;
  • 对文件进行一定复杂的重命名;
  • 不要暴露文件上传后的路径;
  • 等等…

文件上传漏洞测试流程

  1. 对文件上传的地方按照要求上传文件,查看返回结果(路径,提示等);
  2. 尝试上传不同类型的恶意文件,比如xx.php文件,分析结果;
  3. 查看html源码,看是否通过js在前端做了上传限制,可以绕过;
  4. 尝试使用不同方式进行绕过:黑白名单绕过/MIME类型绕过/目录0x00截断绕过等;
  5. 猜测或结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试;

客户端验证

image-20221212170115112

我们尝试上传一个php文件

image-20221212170303019

出现一个弹窗说我们上传的文件不符合要求,这里是一个前端的JS弹窗,他直接通过前端弹出了一个框,那么我们就会怀疑它是不是通过前端做的限制呢?我们来看一下

我们打开开发者选项,查看器查看源码

image-20221212170512264

我们在这里查看浏览按钮,可以看出这里有一个对应的判断,当input标签去onchange,发生改变的时候,他就回去调用checkFileExt

我们右键页面去看一下源码

image-20221212170741875

checkFileExt这个函数就是通过JavaScript来判断上传的内容来进行相关的限制,所有在前端做的限制只能起到辅助的作用,起不到实际性的作用。比如说我们可以通过控制台对代码进行修改,比如说我们可以把checkFileExt函数删掉,这和我们之前XSS漏洞的时候修改限制字数一样。

image-20221212171059900

删掉以后我们再上传,就不会有那样的限制了。

image-20221212171602201

我们上传的这个a1.php里面其实就是一个一句话木马

image-20221212171524204

我们可以来试一下

image-20221212171723175 image-20221212172121444

这样就可以直接被执行了,我们在这里就是绕过了客户端的限制,上传了一个非预期的文件。通过对这个一句话木马的访问,我们就能控制整个服务器。

服务端验证

文件上传漏洞之MIME类型

MIIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩 展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。常见的MIME类型,比如:

  • 超文本标记语言文本.html,.html texthtml
  • 普通文本.txt text/plain
  • RTF文本.rtf application/rtf
  • GIF图形.gif image/gif
  • JPEG图形.ipeg,jpg image/jpeg
$_FILES()函数

通过使用PHP的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。第一个参数是表单的input name,第二个下标可以是“name”,“type”,“size”,“tmp_name”或”error“。就像这样:

  • $_FILES[“file”] [“name”] - 被上传文件的名称
  • $_FILES[“file”] [“type”] - 被上传文件的类型
  • $_FILES[“file”] [“size”] - 被上传文件的大小。以字节计
  • $_FILES[“file”] [“tmp_name”] - 存储在服务器的文件的临时副本的名称
  • $_FILES[“file”] [“error”] - 由文件上传导致的错误代码
验证
image-20221213090235757

我们还是首先验证一下正常功能,我们上传一张正常的照片看看

image-20221213090655404 image-20221213090709716

没有问题,这个是可以正常上传成功的。我们可以试一下php文件

image-20221213090811179

我们可以看到上传失败了,提示我们上传的文件不是图片格式。我们直接先来看一下源码

image-20221213091234155

关键点在于它定义了一个$_FILES去获取文件的类型,然后再把这个类型去和他定义好的mime type去进行比较。

我们首先上传一个正常的图片,去抓一下它的content-type,然后我们再去上传一下我们的一句话木马

image-20221213091753595

我们先看我们上传成功的图片,他这里的Content-Type是image/png

image-20221213091831908

我们再来看一下我们上传失败的php文件,他这里的Content-Type是被认为了application/octet-stream

image-20221213091945678

我们可以把这个数据包发送到Repeter里面去,然后我们复制一下上面上传成功的Content-Type,我们可以在Repeter里面把这个Content-Type替换掉

image-20221213092247628

我们点击发送,查看返回结果

image-20221213092425734

我们可以看到文件上传成功,那这样就说明我们通过对HTTP头的修改,绕过了后端的MIME的限制。这个PHP文件上传成功后,就和前面的一样,我们可以通过访问这个PHP文件,传参,通过一句话木马来控制服务器。

文件上传漏洞之getmagesize()类型验证

Getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。

是否可以绕过呢?可以,因为图片头可以被伪造。

image-20221213093551457

我们上传正常图片是可以的。我们就可以尝试上传一张带有恶意代码的图片,也就是图片马。

图片木马的制作:

  • 方法一:直接伪造头部GIF89A

  • 方法二:CMD:copy /b test.png+muma.php cccc.png

    ​ 其中b表示以二进制文件,a表示以ASCII文件

  • 方法三:使用GIMP(开源的图片修改软件),增加备注,写入执行命令

image-20221213095005312 image-20221213095447241 image-20221213095509718

我们可以用C32Asm来看一下这张生成好的图片的十六进制

image-20221213095910920

我们可以看到这章图片前面都是原来的图片十六进制内容,但是最后接入了我们刚才输入的php内容

image-20221213100601852

我们可以看到此时的这张图片马就可以被我们成功上传了,意味着这个点是存在文件上传漏洞的。Getimagesize()是可以被绕过,它只是对文件十六进制的开头进行一个判断。

即使绕过也仅仅是说你可以上传一个带有恶意代码的图片,但是这个图片的恶意代码你只有执行,才能达到一个利用的效果,我们直接访问这个图片,实际上这个恶意代码是不会被执行的。

image-20221213100955242

我们得到一张图片,也可以看到我们的php并没有被执行

这时候我们可以通过文件包含漏洞来利用这个图片木马,因为include函数会包含上传的文件执行任意代码,我们可以利用它的这个漏洞执行木马。

在本地文件包含中,选择一项点击提交,把URL中的filename的值修改为图片木马的路径。

../../unsafeupload/uploads/2022/12/13/4940776397ddef38b6e823906942.png

image-20221213101546204

出现下面这样的页面就说明我们返回对了

image-20221213101622534

我们可以滑倒最下面看到我们的phpinfo被执行了

image-20221213102237078

这样就相当于通过一个本地文件包含加上一个图片验证不够严格的图片上传问题,进行一个结合性的使用,实现出一个更深层次的危害。

防范措施

  • 不要在前端使用JS实施上传限制策略
  • 通过服务端对上传文件进行限制:
    1. 进行多条件组合检查:比如文件的大小、路径、扩展名、文件类型、文件完整性
    2. 对上传的文件在服务器上存储时进行重命名(制定合理的命名规则)
      hpinfo被执行了

[外链图片转存中…(img-dtq51cJ0-1670925366918)]

这样就相当于通过一个本地文件包含加上一个图片验证不够严格的图片上传问题,进行一个结合性的使用,实现出一个更深层次的危害。

防范措施

  • 不要在前端使用JS实施上传限制策略
  • 通过服务端对上传文件进行限制:
    1. 进行多条件组合检查:比如文件的大小、路径、扩展名、文件类型、文件完整性
    2. 对上传的文件在服务器上存储时进行重命名(制定合理的命名规则)
    3. 对服务器端上传文件的目录进行权限控制(比如只读) ,,限制执行权限带来的危害

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

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

相关文章

基于51单片机的数字频率计设计

仿真原理图: 程序运行图: 部分程序: #define LED_GLOBAL 1 #include "led.h" /******************************************************************************************* *函数名称:delay_us(uint us) *函数…

15.JavaScript 02

文章目录一、DOM简单学习:为了满足案例要求1、DOM知识点简单学习2、事件简单学习3、案例1:电灯开关二、BOM1、概念2、组成3、Window:窗口对象1. Window窗口对象知识点2. 案例2:轮播图4、Location:地址栏对象1. Locatio…

手写Spring5(资源加载Spring.xml解析和注册Bean对象)

文章目录目标设计思路项目结构一、实现1、资源加载接口定义和实现获取ClassPath下的文件信息获取指定文件路径的方式读取文件信息获取HTTP的方式读取云服务的文件2、包装资源加载器定义和实现-策略模式的体现包装资源加载器实现3、Bean定义读取接口4、Bean定义抽象类实现5、解析…

[激光原理与应用-53]:《激光焊接质量实时监测系统研究》-4-激光焊接系统软件设计

目录 前言: 4.1 操作系统和开发平台 4.1.1 Windows2000 操作系统概述 4.1.2 虚拟仪器开发平台软件 LabWindows/CVI 4.2 总体软件设计 4.2.1 数据采集程序 4.2.2 软件实现的功能 4.2.2.1 主机软件的数据采集 4.2.2.2 主机软件的数据分析(核心&am…

暗棕红色粉末ICG-COOH, ICG Carboxlaic acid,181934-09-8,ICG和PEG链接可在体内长循环

英文名:ICG-COOH ICG Carboxlaic acid CAS No:181934-09-8 外观:暗棕红色粉末 溶解度:在水或甲醇中溶解 纯度:90% 结构式: 西安凯新近红外荧光染料Near IRDyes激发和发射波长和颜色图 ICG NHS ester的NHS可以和蛋白…

八、闭包高级、对象、构造函数、实例化

闭包高级、对象、构造函数、实例化 闭包高级 函数被定义时生成[[scope]]->生成scope chain -> scope chain中存着上级的环境。 函数被执行的前一刻(预编译过程),生成自己的AO,排到scope chain的最顶端。 函数执行完毕的…

基于天鹰算法优化的lssvm回归预测-附代码

基于天鹰算法优化的lssvm回归预测 - 附代码 文章目录基于天鹰算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于天鹰算法优化的LSSVM4.测试结果5.Matlab代码摘要:为了提高最小二乘支持向量机(lssvm)的回归预测准确率,对…

DFA的最小化

一、实验目的 1.熟练掌握DFA与NFA的定义与有关概念。 2.理解并掌握确定的有穷自动机的最小化等算法。 二、实验要求 输入:DFA 输出:最小化的DFA 三、实验过程 1.化简DFA关键在于把它的状态集分成一些两两互不相交…

一、ArrayList源码解读

ArrayList源码 一、前言 ArrayList在日常的开发中使用频率非常高,但是JDK是如何去设计ArrayList的,这就需要我们好好去了解底层实现原理,这样使用起来才能做到心中有数;当然,还能应付面试。本篇文章会围绕ArrayList的…

王道操作系统网课笔记合集

介绍 操作系统是什么? 计算机结构大概分为四层: 用户应用程序操作系统硬件 操作系统是一类系统软件,调度硬件资源,合理分配管理软件(因此操作系统又被称作资源管理器(resource manager)&…

简洁而优美的结构 - 并查集 | 一文吃透 “带权并查集” 不同应用场景 | “手撕” 蓝桥杯A组J题 - 推导部分和

💛前情提要💛 本章节是每日一算法的并查集&带权并查集的相关知识~ 接下来我们即将进入一个全新的空间,对代码有一个全新的视角~ 以下的内容一定会让你对数据结构与算法有一个颠覆性的认识哦!!! ❗以…

【Unity 3D 从入门到实践】Unity 3D 预制体

目录 一,预制体介绍 二,创建预制体 三,实例化预制体 一,预制体介绍 预制体是 Unity 3D 提供的保存游戏对象组件和属性的方法,通过预制体可以快速的实例化挂载不同组件的游戏对象,从而减少开发难度&…

使用光隔离的调制器在电机控制中进行安全、准确的隔离电流传感

介绍 在工业电机或伺服控制应用中,准确的电流测量是控制回路的一部分。目前的测量不仅需要尽可能准确,还需要安全可靠。 工业电机或伺服控制系统通常包含高压,在过流或短路等故障事件中,这些情况需要快速检测和整流&#xff0c…

Android开发基础

文章目录前言工程项目结构hello world界面布局代码操作新页面页面间跳转简单计算器的实现思路前端控件传递数据后端实现逻辑两个Activity之间传值发送数据返回数据SQLite简单使用利用语句写在后面写在后面前言 安卓(Android)是一种基于Linux内核的开源操作系统 使用java、kot…

不就是性能测试吗?竟让我一个月拿了8个offer,其中两家都是一线大厂

随着互联网的发展,单机软件的逐渐减少,系统从单机步入“云”时代,软件系统功能和规模也越来越庞大,盗版也越来越难,用户规模也越来越大,企业盈利随之爆发式地增长。 随着用户数量的增多,系统稳…

Chrome浏览器修改用户资料(User Data)的存放位置

2022.12.13一、 原先采用的在快捷方式中修改目标的方法,没有效果。二、创建链接1. 复制2. 删除3. 创建链接mklink参考用于缓解C盘压力,将浏览器用户数据存放于其他的指定位置。简单记录一下操作步骤。 其中用户数据可以如此查找,在浏览器地址…

数字虚拟人发展简史

虚拟人的发展史就是技术的发展史 作为元宇宙时代的基石,虚拟人的发展历史与制作技术的进步高度相关。在元宇宙概念中,未来每个用户都将依托虚拟人作为自己的化身进入虚拟世界中探索,要达成这个目的,就要求数字虚拟人不仅拥有人的…

java计算机毕业设计ssm智慧消防维保系统后端设计与实现3cmg0(附源码、数据库)

java计算机毕业设计ssm智慧消防维保系统后端设计与实现3cmg0(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都…

【毕业设计】微信小程序校园跑腿系统 校园跑腿小程序 校园跑腿微信小程序

一、前言 大学是一个小社会,我们在学校学习到专业知识的时候,有会遇到很多形形色色的任务,但最重要的依旧是社会经历。很多大学生都会想着在大学闯出一片新天地,所以他们往往会选择自己或者带上志同道合的朋友来一起创业。一次好…

泛微京桥通集成SAP,让采购流程闭环、业务管理一体化

SAP作为强大的业务处理平台,推动着组织采购管理走向数字化。其中的SAP MM(MaterialManagement)(物料管理)涉及到物料管理全过程,主要包括:物料需求计划、物料主数据、采购、供应商评价、库存管理…