Unsafe Filedownload(不安全的文件下载)
文件下载的功能在很多web 系统上都会出现。当我们点击下载链接,就会向后台发送一个请求,一般这个请求会包含下载文件的名称,后台收到请求会开始执行下载代码,将该文件名对应的文件response 给浏览器,从而完成下载。
后台在收到请求的文件名时,将其直接拼接到下载文件的路径中而不对其进行安全判断的话,就会引发不安全的文件下载漏洞。
攻击者可以构造一个路径(如:…/…/…/etc/passwd),浏览器可能会直接将指定的文件下载下来,就会导致后台的敏感信息(密码文件、源代码等)被下载。
(注:目录遍历的符号“…/”这里是两个点,只是在这个网页上显示成了三个点)
修复
过滤掉所有的…/
设置白名单。
下面通过 pikachu 的 Unsafe Filedownload 模块测试不安全的文件下载。
pikachu Unsafe Filedownload
打开界面,可以看到可以下载球员的头像图片。
点击名字,尝试下载,用 burp 抓包看看。
可以看到,我们要下载的文件直接拼接在了 filename 变量后面。
接下来尝试修改 filename 后面的参数。
通过…/目录遍历构造,下载目标文件,这个文件是 unsafe filedownload根目录下的源文件。
…/down_nba.php
关于用多少个”…/“的方法感觉还没弄明白,只能通过一些尝试去了解一部分。
遍历上面这个目录只能用1个”…/“,其他数量都行不通。
包括和dowm_nba.php 在同一个文件夹里的其他两个文件 execdownload.php 、unsafedownload.php 也是只用一个”…/“。
再尝试上一级文件夹中的一个文件,发现用2个”…/“是可以遍历下载的。
得出结果往前一级的文件就多加一个”…/“就可以成功下载。
但是还有是存在问题,就是不知道上一级中的其它文件夹中的文件如何遍历。(比如上面图片中的 sqli 文件中的文件似乎无法遍历)