目录
获取下载链接
修改链接
重新构造链接
拓展
不安全的文件下载概述
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
你可以通过“Unsafe file download”对应的测试栏目,来进一步的了解该漏洞。
一句话概括:就是没有对每个用户下载的文件进行限制,用户可以自己修改下载地址下载自己想要的服务器文件
获取下载链接
先随意点击一张图片进行下载,复制后得到:
http://ip:端口/vul/unsafedownload/execdownload.php?filename=kb.png
很明显能看出参数名为 filename ,文件名为 kb.png
修改链接
把链接中的文件名进行修改,获取自己想要的文件。比如我想要的是当前界面的php文件,先复制当前php网址:
http://ip:端口/vul/unsafedownload/down_nba.php
现在已知当前 php 文件名为 down_nba.php
所以我们将之前的链接合并为:
http://ip:端口/vul/unsafedownload/execdownload.php?filename=down_nba.php
但是得到的结果却是:
先别急,说明不在同一级目录。经过我的开发经验,一般图片会放在 images 或 img 目录,或者经过更细的划分。但是毋庸置疑的是,基本上都肯定在上一级或者上上级目录,不会在子目录。
所以我们重新构造链接。
重新构造链接
我们先尝试一下上一级目录
http://ip:端口/vul/unsafedownload/execdownload.php?filename=../down_nba.php
成功下载目标php文件
拓展
现在基本可以确定存在 Unsafe file download 漏洞。可以进行 ../ 返回上一级,再进行猜目录等构造更复杂的下载路径来下载服务器中的敏感文件。