Pikachu靶场——不安全的文件下载(Unsafe Filedownload)

1. Unsafe Filedownload

不安全的文件下载概述

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。如果后台在收到请求的文件名后,将其直接拼接到下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。

此时如果攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如…/…/…/etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。

漏洞原理

给用户提供了一个下载的功能,并能接收相关的参数变量,开发时候,使用了读去文件的相关函数,对前端用户读取文件请求,没有进行相应的控制或控制不严(限制、校验),能输出请求文件的内容,提供给前端下载。

漏洞危害

可以下载服务器的任意文件:

  • 获得网站web源码,再对代码进行审计,以获得更多的漏洞
  • 获得网站、服务器、系统、数据库等中间件配置文件
  • 获得应用于系统配置文件
  • 对内网的信息进行一个探测
  • 下载各种.log文件,并寻找后台地址、文件上传点等地方

漏洞发现

  • 通过web漏洞扫描工具对网站实施扫描可能发现任意文件读取/下载漏洞,发送一系列”…/”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件。

  • 也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径信息。

1.1 Unsafe Filedownload

点击球员下面的名字,然后图片就下载下来了。

在这里插入图片描述

image-20230827181205510

复制图片的下载路径

http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png

先构造一个假的管理员文件

image-20230827181305939

然后构造playload

http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../admin.txt

一个../就是跳出一级目录到上一级目录下,../../../../表示向上跳三级目录。

在浏览器页面中输入该路径,admin.txt文件就被下载下来了

image-20230827181058479

注意:如果用绝对路径,例如 :http://192.168.188.183/pikachu/vul/unsafedownload/execdownload.php?filename=C:\Windows\System32\drivers\etc\hosts无法成功。

1.1.1 源代码分析

image-20230923113649755

发现在第10行的位置上,传递的参数前面拼接了download目录,这样就导致我们在输入绝对路径的时候无法进行下载文件了。

如果将前面拼接的download目录去掉,绝对路径就可以成功。

image-20230923114130413

hosts文件下载成功。

image-20230923114030776

不安全的文件下载漏洞的原因是,服务器代码没有对输入的filename进行过滤,只是检查了以下文件是否存在,如果存在就下载了。

1.1.2 漏洞防御

添加一个白名单过滤,让其只允许下载download文件夹下的图片资源。

修改源码

由于图片太多,这里选用一个图片做实例。

if(!file_exists($file_path) || $file_path != "download/ai.png"){
    skip("你要下载的文件不存在,请重新下载", 'unsafe_down.php');
    return ;
}

image-20230923120536265

输入之前构造的payload

http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../admin.txt

发现下载失败,成功防御

image-20230923120513875

1.2 不安全的文件下载防御措施

  • 净化数据:对用户传过来的文件名参数进行统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
  • 任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生。
  • 要下载的文件地址保存至数据库中,让用户提交文件对应ID下载文件。
  • 用户下载文件之前需要进行权限判断。
  • 文件放在web无法直接访问的目录下。
  • 将.过滤,不允许提供目录遍历服务。
  • 公开文件可放置在web应用程序下载目录中通过链接进行下载。
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来日可期x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值