不安全的文件下载
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。
切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
1.漏洞描述
一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
2.漏洞原理
给用户提供了一个下载的功能,并能接收相关的参数变量
开发时候,使用了读去文件的相关函数
对前端用户读取文件请求,没有进行相应的控制或控制不严(限制、校验)
能输出请求文件的内容,提供给前端下载
3.漏洞危害
可以下载服务器的任意文件:
获得网站web源码,再对代码进行审计,以获得更多的漏洞
获得网站、服务器、系统、数据库等中间件配置文件
获得应用于系统配置文件
对内网的信息进行一个探测
下载各种.log文件,并寻找后台地址、文件上传点等地方
4.漏洞发现
通过web漏洞扫描工具对网站实施扫描可能发现任意文件读取/下载漏洞,发送一系列”…/”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件。
也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径信息,如收集到网站中间件版本为apache,则想办法构造…/…/…/ WEB-INF/web.xml等,然后查看其是否可被读取或者下载出来。
有些WAF会过滤…/,可以构造 /.%252e/.%252e/.%252e/ , %25对应的是%,%2e对应的是.,所以 .%252e/ 对应的是 …/
5.如何防御
净化数据:对用户传过来的文件名参数进行统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
要下载的文件地址保存至数据库中。
文件路径保存至数据库,让用户提交文件对应ID下载文件。
用户下载文件之前需要进行权限判断,open_basedir 中可以设置访问权限
文件放在web无法直接访问的目录下。
将.过滤,不允许提供目录遍历服务。
公开文件可放置在web应用程序下载目录中通过链接进行下载。
1.Unsafe file download
点击一个图片下面的人名,即可进行下载
我们可以看到超链接这里有一个filename的参数
http://xxx/vul/unsafedownload/execdownload.php?filename=rayal.png
对这个参数进行修改
我们成功把下载的界面给下载了
继续尝试一下其他的东西
发现可以下载到/etc/passwd
漏洞利用成功