广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >不安全的文件下载和上传
  • 907
分享到

不安全的文件下载和上传

安全phpweb安全 2023-09-01 07:09:41 907人浏览 独家记忆
摘要

不安全的文件下载和上传(PIKACHU) 文件下载漏洞概述 很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。 但是,如果文件下载功能设计不当,则可能导致攻击者可以

安全的文件下载和上传(PIKACHU)

文件下载漏洞概述

很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件
但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感文件。(又称:任意文件下载

127.0.0.1/pikachu/vul/unsafedownload/execdownload.PHP?filename=../../../../../../../../../etc/passwd

漏洞代码分析

header("Content-type:text/html;charset=utf-8");// $file_name="cookie.jpg";$file_path="download/{$_GET['filename']}";//用以解决中文不能显示出来的问题$file_path=iconv("utf-8","gb2312",$file_path);//首先要判断给定的文件存在与否if(!file_exists($file_path)){    skip("你要下载的文件不存在,请重新下载", 'unsafe_down.php');    return ;}$fp=fopen($file_path,"rb");$file_size=filesize($file_path);

文件上传漏洞概述

因为业务功能的需要,很多WEB站点都有文件上传的接口比如:
—— 1、注册时上传头像图片(比如jpg,png,gif等);
—— 2、上传文件附件(doc,xls等)

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

文件上传漏洞测试流程 (一句话木马)

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

不安全的文件上传漏洞 - 服务端验证

MIME介绍(小知识介绍)

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

每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图像image等,后面定义具体的种类常见的MIME类型,比如:
超文本标记语言文本 .html, .html text/html
普通文本 .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"] - 由文件上传导致的错误代码

文件上传漏洞 - MIME类型验证

漏洞代码分析

$html='';if(isset($_POST['submit'])){//     var_dump($_FILES);    $mime=array('image/jpg','image/jpeg','image/png');//指定MIME类型,这里只是对MIME类型做了判断。    $save_path='uploads';//指定在当前目录建立一个目录    $upload=upload_sick('uploadfile',$mime,$save_path);//调用函数    if($upload['return']){        $html.="

文件上传成功

文件保存的路径为:{$upload['new_path']}

"
; }else{ $html.="

{$upload['error']}

"
; }}

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

Getimagesize() 返回结果中有文件大小文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。
是否可以绕过呢?可以,因为图片头可以伪造。

文件包含漏洞之文件上传漏洞的利用

图片木马的制作:

  1. 方法1:直接伪造头部GIF89A
  2. 方法1.CMD: copy /b test.png + muma.php cccc.png
  3. 方法2.使用GIMP开源的图片修改软件),通过增加备注,写入执行命令
# 写一个 “一句话” 木马文件 phpinfo<?php phpinfo(); ?># 在 CMD 中进行一个 ai.png图片与 phpinfo的php文件 的结合,生成一个新的文件 ccc.pngC:\Users\runner\Desktop> copy /b ai.png + phpinfo.php ccc.png# 然后我把 ccc.png 拖入了centoos7虚拟机 进行操作xxd ccc.png   //查看pngxxd ai.png | head -n 1   // xxd可以读取目标的十六进制

在getimagesize() 中出现的问题

出现的类似的问题

对于出现以上的类似的问题
进入 pikachu > vul > unsafeupload > getimagesize.php 中进行修改
修改为.date_default_timezone_set('UTC') 即可
代码修改并保存

然后,保存,进入页面刷新,就上传成功啦!!!

上传图片

后续操作

复制上传的 ccc.png 的链接地址

请添加图片描述

# 进行拼接Http://127.0.0.1/pikachu/vul/unsafeuploaduploads1/576245632090ca96c49485955114.png   //图片路径  http://127.0.0.1/pikachu/vul/unsafeupload/uploads1/576245632090ca96c49485955114.pngunsafeupload/uploads1/576245632090ca96c49485955114.png

File Inclusion 中的包含漏洞中执行(进行链接的一个拼接

图片上传漏洞

上传成功之后,结果如下:

上传成功!
上传成功!!!

不安全的文件上传漏洞 - 防范措施

· 不要在前端使用js实施上传限制策略

· 通过服务端对上传文件进行限制:(如下)

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

来源地址:https://blog.csdn.net/weixin_61427044/article/details/126836804

--结束END--

本文标题: 不安全的文件下载和上传

本文链接: https://www.lsjlt.com/news/387717.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 不安全的文件下载和上传
    不安全的文件下载和上传(PIKACHU) 文件下载漏洞概述 很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。 但是,如果文件下载功能设计不当,则可能导致攻击者可以...
    99+
    2023-09-01
    安全 php web安全
  • SpringMVC实现文件上传下载的全过程
    目录前言一、通用配置二、实现文件下载,上传功能总结前言 文件的上传和下载都是基于io复制,只不过 文件上传是浏览器向服务器发送报文 文件下载是服务器向浏览器发送报文 提示:以下是本篇...
    99+
    2022-11-12
  • ASP.NETCore实现文件上传和下载
    本文实例为大家分享了ASP.NET Core实现文件上传和下载的具体代码,供大家参考,具体内容如下 一、文件上传 1.1 获取文件后缀 /// <summary> ///...
    99+
    2022-11-13
  • Go实现文件上传和下载
    本文实例为大家分享了Go实现文件上传和下载的具体代码,供大家参考,具体内容如下 一.文件上传 文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进制流进行解析 HTM...
    99+
    2022-11-11
  • vue实现文件上传和下载
    本文实例为大家分享了vue实现文件上传和下载的具体代码,供大家参考,具体内容如下 文件上传 vue中的文件上传主要分为两步:前台获取到文件和提交到后台 获取文件 前台获取文件,主要是...
    99+
    2022-11-12
  • springMVC实现文件上传和下载
    本文实例为大家分享了springMVC实现文件上传和下载的具体代码,供大家参考,具体内容如下 1准备工作 web.xml文件导入DispatcherServlet,Character...
    99+
    2022-11-12
  • java实现文件上传和下载
    本文实例为大家分享了java实现文件上传和下载的具体代码,供大家参考,具体内容如下 文件的上传 upload:文件上传 客户端通过表单的文件域file  把客户端的文件 上...
    99+
    2022-11-12
  • java- SFTP文件上传下载
    JSch - SFTP文件上传下载 文章目录 JSch - SFTP文件上传下载1. JSch简介2. ChannelSftp常用ApiJSch支持三种文件传输模式文件上传 put() 方法文...
    99+
    2023-09-30
    java 服务器
  • python ftp 上传、下载文件
    python ftp 上传、下载文件#获取昨天日期TODAY = datetime.date.today()  YESTERDAY = TODAY - datetime.timedelta(days=1) CURRENTDAY=YESTER...
    99+
    2023-01-31
    上传 文件 python
  • Java上传下载ftp文件
    在Java中连接FTP服务器可以使用Apache Commons Net库提供的FTPClient类。以下是一个简单的示例代码,演示如何连接到FTP服务器、进行文件上传和下载操作: import org.apache.commons.net...
    99+
    2023-09-03
    java apache 服务器
  • RestTemplate文件上传下载与大文件流式下载
    目录一、文件上传二、文件下载三、大文件下载本文是精讲RestTemplate第6篇,前篇的blog访问地址如下: RestTemplate在Spring或非Spring环境下使用精讲...
    99+
    2022-11-13
  • Spring MVC 实现文件的上传和下载
    文章目录 前言1. 文件上传1.1 文件上传介绍1.2 文件上传实现1.2.1 添加依赖1.2.2 配置上传解析器1.2.3 通过表单上传1.2.4 创建控制器类1.2.5 上传演示 ...
    99+
    2023-09-26
    spring mvc java java-ee
  • Android Http实现文件的上传和下载
    最近做一个项目,其中涉及到文件的上传和下载功能,大家都知道,这个功能实现其实已经烂大街了,遂、直接从网上荡了一堆代码用,结果,发现网上的代码真是良莠不齐,不是写的不全面,就是有...
    99+
    2022-06-06
    HTTP Android
  • Linux下怎么上传、下载文件
    这篇文章给大家分享的是有关Linux下怎么上传、下载文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。lrzsz-0.12.20.tar.gz是一款linux下命令行界面上支持上传和下载的第三方工具,能够起到很方...
    99+
    2023-06-28
  • h5中怎么上传和下载文件
    这篇文章主要讲解了“h5中怎么上传和下载文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“h5中怎么上传和下载文件”吧!前言HTML5 中提供的文件API在...
    99+
    2022-10-19
  • Spring MVC实现文件上传和下载
    本文实例为大家分享了Spring MVC实现文件上传和下载的具体代码,供大家参考,具体内容如下 文件上传 1、导入主要依赖 <!--文件上传--> <depe...
    99+
    2022-11-12
  • Spring Boot实现文件上传和下载
    实现Spring Boot文件上传和下载的步骤: 1.文件上传 在pom.xml文件中添加依赖:spring-boot-starter-web和spring-boot-starter-thymelea...
    99+
    2023-09-06
    spring boot java servlet
  • Android OKhttp使用(下载和上传文件)
    Android okhttp的使用 首先在build.gradle中引入okhttp implementation 'com.squareup.okhttp3:okhttp:3.14.2' implementation 'co...
    99+
    2023-08-23
    okhttp android
  • linux下上传下载文件夹的方法
    linux下目录复制:本机->远程服务器 scp -r /home/shaoxiaohu/test1 zhidao@192.168.0.1:/home/test2 test1为源目录,test2为目标目录,z...
    99+
    2022-06-04
    linux 上传文件夹 linux下载文件夹
  • SpringMVC实现上传下载文件
    本文实例为大家分享了SpringMVC实现上传下载文件的具体代码,供大家参考,具体内容如下 一、SpringMVC专门提供了CommonsMultipartResolver组件用于文...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作