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

文章目录

  • 1. Unsafe Filedownload
    • 1.1 Unsafe Filedownload
      • 1.1.1 源代码分析
      • 1.1.2 漏洞防御
    • 1.2 不安全的文件下载防御措施

1. Unsafe Filedownload

不安全的文件下载概述

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

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

漏洞原理

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

漏洞危害

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

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

漏洞发现

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

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

1.1 Unsafe Filedownload

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

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第1张图片

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第2张图片

复制图片的下载路径

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

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

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第3张图片

然后构造playload

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

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

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

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第4张图片

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

1.1.1 源代码分析

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第5张图片

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

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

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第6张图片

hosts文件下载成功。

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第7张图片

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

1.1.2 漏洞防御

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

修改源码

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

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

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第8张图片

输入之前构造的payload

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

发现下载失败,成功防御

Pikachu靶场——不安全的文件下载(Unsafe Filedownload)_第9张图片

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

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

你可能感兴趣的:(Pikachu,网络安全,系统安全,web安全,安全,pikachu,不安全的文件下载)