任意文件下载漏洞原理以及修复方法

发布时间:2023年12月25日

漏洞名称 :任意文件下载 ,文件遍历下载。

漏洞描述 :目录遍历(任意文件下载)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web
中的文件,而且可以浏览或者下载到系统中的文件,攻击人员通过目录遍历攻击可以
获取系统文件及服务器的配置文件等等。一般来说,他们利用服务器API、文件标准
权限进行攻击。严格来说,目录遍历攻击并不是一种web漏洞,而是网站设计人员的
设计?漏洞?。如果web设计者设计的web内容没有恰当的访问控制,允许http遍历,
攻击者就可以访问受限的目录,并可以在web根目录以外执行命令。

检测条件 :1、 网站URL中存在下载参数,并且未进行过滤../../../字符。

检测方法:

1、 通过web漏洞扫描工具对网站实施扫描可能发现目录遍历或者任意文件下载漏
洞,发送一系列?../?字符来遍历高层目录,并且尝试找到系统的配置文件或
者系统中存在的敏感文件。
2、 也可通过判断网站语言,并根据其url中部分提供的参数,进行构造相关的路径
信 息 , 如 收 集 到 网 站 中 间 件 版 本 为 apache , 则 想 办 法 构 造 ../../../
WEB-INF/web.xml等,然后查看其是否可被下载出来。随后可构造下载系统文件。

修复方案:

1、 净化数据:对用户传过来的文件名参数进行硬编码或统一编码,对文件类型进行
白名单控制,对包含恶意字符或者空字符的参数进行拒绝。

2、 web应用程序可以使用chroot环境包含被访问的web目录,或者使用绝对路径+参
数来访问文件目录,时使其即使越权也在访问目录之内。www目录就是一个chroot
应用. 由chroot创造出的那个根目录,叫做?chroot监狱?(所谓"监狱"就是指
通过chroot机制来更改某个进程所能看到的根目录,即将某进程限制在指定目录
中,保证该进程只能对该目录及其子目录的文件有所动作,从而保证整个服务器
的 安 全 , 详 细 具 体 chroot 的 用 法 , 可 参 考 :
http://blog.csdn.net/frozen_fish/article/details/2244870
3、 任意文件下载漏洞也有可能是web所采用的中间件的版本低而导致问题的产生,
例如ibm的websphere的任意文件下载漏洞,需更新其中间件的版本可修复。
4、 要下载的文件地址保存至数据库中。
5、 文件路径保存至数据库,让用户提交文件对应ID下载文件。
6、 用户下载文件之前需要进行权限判断。
7、 文件放在web无法直接访问的目录下。
8、 不允许提供目录遍历服务。
9、 公开文件可放置在web应用程序下载目录中通过链接进行下载。
参考代码:

public String download() throws Exception {
//获取文件 id
String id = Struts2Utils.getRequest().getParameter("id");
try {
//通过 id 进行文件查询
DownloadFile downFile =
fileService.findEntityById(Long.parseLong(id));
// 获取该附件的类型
byte[] bt = null;
bt = downFile.getContent();
HttpServletResponse res
=Struts2Utils.getResponse();
res.reset();
res.setContentType("application/x-msdownload");
res.setHeader("Content-Disposition",
"attachment;filename="+ URLEncoder.encode(uacFile.getName(),
"UTF-8"));
OutputStream out = res.getOutputStream();
out.write(bt);
out.flush();
out.close();
} catch (Exception e1) {
e1.printStackTrace();
}
return null;

}

文章来源:https://blog.csdn.net/CHENSMALLYUN/article/details/135202440
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。