《网安面试指南》icon-default.png?t=N7T8http://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;

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部