《网安面试指南》http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect
1.1 任意文件下载漏洞
l 阅读本章节需要掌握的技术
HTTP请求协议基础
常用工具:
BurpSuite(强大的抓包改包工具)
1.1.1 漏洞原理
很多网站由于业务需求,往往需要提供文件(附件)下载的功能块,但是如果对下载的文件没有做限制,直接通过绝对路径对其文件进行下载,那么,恶意用户就可以利用这种方式下载服务器的敏感文件,对服务器进行进一步的威胁和攻击。
1.1.2 漏洞危害
通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等。
1.1.3 检测条件
网站正常运行;网站存在可以下载文件的功能。
1.1.4 检测方法
1、 查找网站存在可下载资源,可读取文件的接口。
2、 使用burpsuite进行数据包的抓取。
3、 寻找数据包中控制文件下载的参数,如
http://www.example.com/filedown.php?filename=testpic.png
4、 修改参数,尝试进行任意文件读取/下载
http://www.example.com/filedown.php?filename=../../../../../../../../../../etc/passwd
要注意的是,部分网站可能存在编码问题,所以构造的时候需要将 /转为url编码 %2f
http://www.example.com/filedown.php?filename=..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd
任意文件下载常用路径
LINUX:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/issue
/etc/fstab
/etc/host.conf
/etc/motd
/etc/sysctl.conf
/etc/inputrc 输入设备配置文件
/etc/default/useradd 添加用户的默认信息的文件
/etc/login.defs 是用户密码信息的默认属性
/etc/skel 用户信息的骨架
/sbin/nologin 不能登陆的用户
/var/log/message 系统的日志文件
/etc/httpd/conf/httpd.conf 配置http服务的配置文件
/etc/ld.so.conf
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/mounts
/porc/config.gz
/var/lib/mlocate/mlocate.db
/porc/self/cmdline
WINDOWS:
C:\windows\system32\drivers\etc\hosts host文件
C:*\apache-tomcat-7.0.1/conf/context.xml、web.xml、server.xml、tomcat-users.xml
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
C:\Windows\repair\sam //系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysqlroot
C:\Windows\php.ini //php配置信息
C:\Windows\my.ini //Mysql配置信息
C:\Windows\win.ini //Windows系统的一个基本系统配置文件
1.1.6 修复建议
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;
}