7 任意文件读取与下载
7.1 概念
对用户查看或下载的文件不做限制,就能够查看或下载任意的文件,可能是源代码文件、敏感文件等。
7.2 产生原因与危害
产生原因
·存读取文件的函数
·读取文件的路径用户可控,且未校验或校验不严
·输出了文件内容
漏洞危害
·下载服务器任意文件。包含脚本代码、系统敏感文件;
·可配合其他类型漏洞进一步攻击
·进一步代码审计,查找更多可利用代码
任意文件读取
<?php
$filename=”test.txt”;
readfile($filename);
?>
<?php
$filename=”test.txt”;
Echo fiile_get_contents($filename);
?>
文件读取函数:readfile()、file_get_contents()、fopen()中,$filename没有经过校验或者校验不合格,用户可控制变量读取任意文件,如/etc/passwd、./index.php。
文件下载方式
·直接下载
·<a href=”http://www.a.com/ccc.rar”>下载</a>
在上述代码中,$filename 没有经过校验,或者校验不合格,用户可以控制这个变量读取
任意的文件,比如/etc/passwd、../index.php等等。这样就造成了任意文件下载漏洞
7.3 挖掘与验证
漏洞挖掘
1.web漏洞扫描器(awvs、appscan、openvas、nessus)
2.手动挖掘从连接和参数名查看
连接:readfile.php?file=**.txt、download.php?file=**.rar
参数名:&readpath=、&filepath=、&path=、&inputfile=、&url=、&data=、&readfile=、&menu=、META-INF= 、WEB-INF
漏洞验证
• Index.php?f=../../../../../../../../etc/passwd
• Index.php?f=../index.php
• Index.php?f=file:///etc/passwd
参数f的参数值为PHP文件时:
1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件查看漏洞
3.提示下载,则是文件下载漏洞
7.4 漏洞修复方案
• 过滤 . 点,使用户在url中不能回溯上级目录
• 正则严格判断用户输入的参数
• Php.ini配置open_basedir限定文件访问范围