1、概述
定义: 任意文件读取也被称作目录遍历。网站读取用户提交的参数中文件路径并显示文件内容的功能存 在缺陷,可导致用户自定义文件名或文件路径
分类: Web通用漏洞
风险等级: 低危/高危
危害: 可读取服务器特定目录下的文件,文件内容不敏感。/可读取服务器任意目录下的文件
Tips:
可使用 ../../ 的方式跳出当前目录
用途: 任意文件下载漏洞的利用主要是为了信息收集,通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。
2、漏洞原理+利用
漏洞示例:
// $file_name="cookie.jpg";
$file_path="download/{$_GET['filename']}";
//用以解决中文不能显示出来的问题
$file_path=iconv("utf-8","gb2312",$file_path);
//首先要判断给定的文件存在与否
if(!file_exists($file_path)){
skip("你要下载的文件不存在,请重新下载", 'unsafe_down.php');
return ;
}
$fp=fopen($file_path,"rb");
$file_size=filesize($file_path);
//下载文件需要用到的头
ob_clean();//输出前一定要clean一下,否则图片打不开
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".basename($file_path));
$buffer=1024;
$file_count=0;
//向浏览器返回数据
//循环读取文件流,然后返回到浏览器feof确认是否到EOF
while(!feof($fp) && $file_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;
}
fclose($fp);
可以看到没有对传入的参数做任何限制,所以产生了文件下载漏洞。
一些简单的绕过:
利用:
当遇到一个任意文件下载时,我们的一般利用思路:
- 下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置
- 下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,如果运气好的话会获得一些前辈们的后门。
- 下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器。
首先要注意权限问题。权限决定我们能下载的文件范围。
尝试读取 /root/.bash_history 看自己是否具有root权限。如果没有的话。我们只能按部就班的利用../来回跳转读取一些.ssh下的配置信息文件。 读取mysql下的.bash_history文件。来查看是否记录了一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析
如果遇到 java+oracle 环境:
可以先下载 /WEB-INF/classes/applicationContext.xml 文件,这里面记载的是web服务器的相应配置,然后下载 /WEB-INF/classes/xxx/xxx/ccc.class 对文件进行反编译,然后搜索文件中的upload关键字看是否存在一些api接口,如果存在的话可以本地构造上传页面用api接口将我们的文件传输进服务器。
如果具有root权限:
- root权限直读shadow文件
Tips:如果只开放了80,443两个端口,账号密码作用不大。
- 下载mlocate.db + locate命令
利用任意文件下载漏洞将mlocate.db文件下载下来,利用locate命令将数据输出成文件,这里面包含了全部的文件路径信息。
locate示例:
locate mlocate.db admin
- 利用linux内核的一个文件
/proc/self/cmdline
当前进程的cmdline参数,可以获取到路径信息。
3、漏洞挖掘
工具:Google hacking或Web漏洞扫描器
任意文件读取漏洞的挖掘方法: 一般通过系统特定目录下的文件来验证是否存在漏洞。 路径穿越攻击:
- 在Linux系统中: 一般请求 ../../../../../../../../../../etc/passwd
cat ../../../../../../../../etc/passwd
- 在Windows系统中: 一般请求 ../../../../../../../../../../windows/win.ini 或C:\WINDOWS\Win.ini
4、漏洞防御
1.设置可读文件的白名单同时限制使用‘.’、‘/’等字符。
2.将文件与数字对应关系保存在文本或数据库中,仅允许用户输入数字,服务器通过转化后,读取文件内容并返回给用户。