漏洞分类:
认证和授权类
漏洞名称:
任意文件下载(目录遍历)
漏洞描述:
任意文件下载(目录遍历)漏洞不同于网站目录浏览,此漏洞不仅仅可遍历系统下web中的文件,而且可以浏览或者下载到系统中的文件,攻击人员通过目录遍历攻击可以获取系统文件及服务器的配置文件等等。一般来说,他们利用服务器API、文件标准权限进行攻击。严格来说,目录遍历攻击并不是一种web漏洞,而是网站设计人员的设计“漏洞”。如果web设计者设计的web内容没有恰当的访问控制,允许http遍历,攻击者就可以访问受限的目录,并可以在web根目录以外执行命令。
风险等级:
通常定为高危,因为这种漏洞会泄露web目录甚至操作系统上的所有文件。
检测条件:
网站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应用程序下载目录中通过链接进行下载。
JAVA参考代码:
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;
}
领取专属 10元无门槛券
私享最新 技术干货