8-1不安全的文件下载原理和案例演示

文件的上传和下载,是我们在WEB服务中,常常涉及到的功能,我相信大家都用过,但是如果这种功能设计不当的话,也会导致一些比较严重的安全问题

文件下载漏洞概述

很多网站都会提供文件下载功能,即用户可以通过点击下载链接,这个链接就会产生一个对应的请求,它告诉服务器我们要下载那个目标文件,然后,后台就去读取后台存在的文件,把他的效应输出到前端。
但是,如果文件下载功能设计不当,则可能导致前端攻击者可以通过构造传入的参数,从而获取到后台服务器上的其他的敏感文件。(又称:任意文件下载)

不安全的文件下载漏洞测试

我们选择unsafe filedownload项目

在这里插入图片描述

然后这边有个功能,我们可以通过点击名字,下载这张图片

在这里插入图片描述

但实际上,当我们去点击这个功能的时候,实际上是这样的请求,

192.168.42.236/pikachu/vul/unsafedownload/execdownload.php?filename=ai.png

它实际上是把ai.png给传到了后台,然后后台就去找这个文件,然后,把这个文件读取之后,又响应输出到前端,浏览器就可以把它下载下来,那如果后端代码控制不够严格,这个地方,有可能就出现漏洞了

当然测试,文件下载漏洞,我们可以通过目录遍历的方式,去测试,

192.168.42.236/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../../../../../../../../../../../../../../../../../../../1.txt

在这里插入图片描述

它就被我们直接下载下来了,这个其实就是后端,对我们传入进去的文件名,对应的文件进行读取的时候,它控制不够严格,就导致了任意文件下载漏洞,接下来,我们看下代码是怎么操作的

不安全的文件下载-代码分析

在这里插入图片描述

我们来看一下down_nba.php这张图片,对应的链接,我们看到当我们点击图片的时候,实际上就传了个a标签,通过a标签传了个参数,通过get传了个参数,这个参数的名称叫filename,对应的子类就是图片的名字,传给了后台,传来了execdownload.php,我们来看一下execdownload.php的源码

$file_path="download/{$_GET['filename']}";
//通过get获取文件名,直接拼接到download文件名下面,在这里,它并没有做任何处理
//用以解决中文不能显示出来的问题
$file_path=iconv("utf-8","gb2312",$file_path);
//首先要判断给定的文件存在与否
if(!file_exists($file_path)){
skip("你要下载的文件不存在,请重新下载", 'unsafe_down.php');
return ;
}
$fp=fopen($file_path,"rb");
//当做了拼接之后,就会对文件进行fopen,读取这个文件
$file_size=filesize($file_path);
//同时算出它的长度,到我们的头文件响应出来
//下载文件需要用到的头
ob_clean();//输出前一定要clean一下,否则图片打不开
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".basename($file_path));
$buffer=1024;
$file_count=0;
//向浏览器返回数据

后面会对文件进行循环的读取,把里面的所有字节流都读取出来,通过while循环,open到前端

在这里插入图片描述

这里最根本的原因是对前端传进来的文件,没有做任何的判断,它不会去判断这个文件是不是默认已经存在的,然后就直接进行了读取

我们应该设计成,当前端传进来一个文件名,它应该进行校验,确认一下,它是不是在我下载的范围内,如果不在,就会告诉你文件不存在,如果在,它就会去下载,同时也需要对范围进行一个限定

命令注入漏洞-防范措施

1.对传入的文件名进行严格的过滤和限定,去判断它是不是应该下载的文件
2.对文件下载的目录进行严格的限定,如果前端传进来一个…/…/的目录,然后,我们可以直接对它进行拼接,然后去读取到其它的文件,这样的设计是不够严谨的,会导致安全问题;

猜你喜欢

转载自blog.csdn.net/m0_53008479/article/details/125214388