任意文件下载漏洞

产生原因

一般网站都提供下载文件功能,常见的实现方法是使用一个动态页面(php、jsp、aspx、asp等)将待下载文件作为参数,一般参数名称为filename,如download.php?filename=xxx等。一般实现过程是,在根据参数filename的值,获得该文件在网站上的绝对路径,读取文件,然后是直接发送给客户端下载。如果没有对传入的参数filename进行过滤,就可以实现下载服务任何文件,产生任意文件下载漏洞。

测试步骤

假如rul如下:
http://www.xxx.com/download.php?filename=hello.doc
尝试下载下载页面的源码(配合“../”):
http://www.xxx.com/download.php?filename=../../download.php

利用方法

该漏洞不像其他漏洞那样有通用的利用方法和相关工具,本漏洞的利用过程与具体的网站架构关系很大,需要了解常见的网站的架构,如网站的配置文件位置等信息。
1.jsp站点
尝试下载tomcat-users.xml文件,里面保存了管理Tomcat的账号密码,该文件在:Tomcat安装目录/conf/tomcat-users.xml,下载该文件之后,就能获取管理员账号密码,然后登陆管理后台,部署带有木马文件的war包。
2.aspx站点
aspx站点一般后台都是SQL Server数据库,因此利用该漏洞的最简单的方法是下载网站根目录下的web.config文件,该文件中一般含有数据库的用户名和密码。
3.asp站点
一般的asp站点都是Access数据库,而Access数据库可以直接下载,因此利用该漏洞比较简便的方法就是直接下载Access数据库,找到管理员密码登陆后台,利用后台的上传功能,上传shell。首先目的是找到数据库文件名以及存放的路径。找到网站与数据库操作的动态页面,动态页面中一般使用include包含连接数据库的配置文件。一般网站的管理后台页面会包含这个信息,所以可以使用任意文件下载漏洞下载管理后台页面,例如admin.asp/mamage.asp等。在这些文件中一般会写有数据库文件的路径以及文件名。直接下载数据库文件可能下载不了,因为管理员一般会做限制,禁止直接下载mdb文件,可以使用任意文件下载漏洞来下载数据库文件。
4.php站点
php一般是使用MySQL数据库, 一般MySQL数据库禁止远程连接,但是可以使用phpMyAdmin进行管理。同意,尝试下载数据库连接文件,conf/config.php等等,获取数据库账户密码之后,如果是root权限,在知道网站绝对路径的情况下,尝试直接写入一句话木马。

漏洞修复

从上面的利用过程可以看出,在使用该漏洞进行渗透过程中,需要利用到路径回溯符../跳出程序本身的限制目录实现下载任意文件,因此只要在下载前对传入的参数进行过滤,直接将..替换成空,就可以简单实现防范的目的。当然最好还是可以对待下载文件类型进行检查,判断是否允许下载类型。