pikachu 不安全的文件下载和上传

第七章 不安全的文件下载和上传

1.不安全的文件下载原理及演示

  场景演示

   可以通过点击名字来进行下载,在新建标签页打开

 

  我们来看一下下载过程中的url

   ai.png这个filename传到了后台,后台去找这个文件,把这个文件读取后,又响应输出到前端,浏览器可以把它下载下来。

  文件下载漏洞,可以用目录遍历的方式去做测试。在filename这里输入足够多的../../../../可以直接跳到根目录下。再以根目录为起始点做相关的读取。

 

   可以直接下载这个文件

 

 

  查看一下后台的代码

   当点击图片时,实际上是传了一个a标签,通过a标签(get请求)传一个参数,然后传给exedownload.php

 

   先获取到文件名,然后直接拼接到download目录下,图片都是存在download下的,没有进行任何处理。

  做完拼接后,去fopen,对它进行读取,同时算出它的长度,然后放到header里响应到前端。

  后面对文件进行循环的读取,把里面的字节流全部读取出来,echo到前端。

  最主要的问题就是没有对前端传过来的文件进行判断,不会判断文件是不是它目录里存在的,就直接进行了读取。应该在传进来时进行一个校验,还需要对范围进行限定。

 

2.不安全的文件上传原理及客户端绕过

 

  场景演示

 

 

   尝试上传一个php文件,不可以

  这个是直接通过前端弹出一个框

  我们来看一下限制是不是由前端做的

   input标签去onchange(发生改变)的时候,就会去调用checkFileExt()

  查看一下页面源代码

   这个函数是通过JavaScript去判断上传的内容。这个判断操作完全是在前端进行完成的。这里是很容易被绕过的。就跟之前的xss一样,把长度改掉。

  把onchange的参数去掉,再来上传一次试试

  成功

  这里我们必须要知道我们上传文件上传到什么路径

  我们复制路径来访问一下

 

  通过x参数来传一个命令

   在这里我们是直接绕过客户端的限制上传了一个非预期文件,system,php文件里写的是一句话木马,我们上传了一个一句话木马文件,通过一句话木马的访问控制后台服务器。

3.上传漏洞之MIME type验证原理和绕过(服务端)

   当浏览器对文件进行识别的时候,它会给这个文件定义一个类型,同时会把这个类型放到HTTP头里。

   可以获取文件相关信息。

  场景演示

 

 

   图片上传成功

 

  查看一下源代码

   先获取前端提交的请求。

 

   关键点在于,通过这个函数获取文件的类型,将其和定义好的类型进行比较。

  问题在于,这个函数是从浏览器的HTTP头里来获取到content typecontent type是前端的用户可以控制的。这个信息的获取是不靠谱的。

  我们抓包来抓一下上传图片时的和上传一句话木马文件的

  图片的:

  上传成功

  木马文件的

   将这个数据包发送到repeater

  我们把content-type修改成image/png看看怎么样

 

   成功,通过HTTP头的修改,绕过MIME type的限制。这个一句话木马文件上传成功,我们就可以通过传参进行控制

猜你喜欢

转载自www.cnblogs.com/zhaihuijie/p/12650738.html
今日推荐