不安全的文件下载和上传
不安全的文件下载
文件下载(unsafedownload)漏洞概述
很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。
但是,如果文件下载功能设计不当,则可能会导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感文件。
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如…/…/…/etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
靶场
我们右键名字,新标签页中打开链接,可以发现自动将图片下载了,我们从URL里可以看到请求,它其实就是把kb.png这么一个filename传到了后台,后台就去找这个文件,把这个文件读取后,又响应到前端,浏览器就可以把它下载下来了这么一个过程。如果说后端的代码控制不够严格,这个地方很有可能就出现漏洞了。

一般来说测试这种文件下载漏洞呢,我们可以通过目录遍历的方式
主要我们输入足够多的…/你其实是可以跳转到根目录下的,然后我们可以以根目录为起点往下去做相关的读取
比如这样:

我们就会把hosts文件下载下来了

这个其实就是后端对我们传入进去的文件名对应的文件进行读取的时候它的控制不够严格,就导致了恶意文件下载这么一个漏洞
我们来看一下后台源码:
这里最根本的原因就是它对前端传进来的文件没有做任何判断。它不会对这个文件判断是不是它目录下的就对它进行读取。当前端传进来一个文件名,它应该对这个文件名进行校验,判断这个文件名是否在被下载的文件范围内,不在就告诉文件不存在,在的话就下载,这样才不会有问题。
防范措施
- 对传入的文件名进行严格的过滤和限定;

本文探讨了不安全的文件下载与上传所带来的潜在威胁,包括如何通过构造路径下载后台敏感文件及绕过上传限制上传恶意文件。
最低0.47元/天 解锁文章
2014

被折叠的 条评论
为什么被折叠?



