网站微信认证费用多少钱,成都seo推广员,百度推广管家,网站后台建设费用文章目录 1、概述1.1、漏洞成因1.2、漏洞危害1.3、漏洞分类1.4、任意文件读取1.4.1、文件读取函数1.4.2、任意文件读取 1.5、任意文件下载1.5.1、一般情况1.5.2、PHP实现1.5.3、任意文件下载 2、任意文件读取攻防2.1、路径过滤2.1.1、过滤../ 2.2、简单绕过2.2.1、双写绕过2.2.… 文章目录 1、概述1.1、漏洞成因1.2、漏洞危害1.3、漏洞分类1.4、任意文件读取1.4.1、文件读取函数1.4.2、任意文件读取 1.5、任意文件下载1.5.1、一般情况1.5.2、PHP实现1.5.3、任意文件下载 2、任意文件读取攻防2.1、路径过滤2.1.1、过滤../ 2.2、简单绕过2.2.1、双写绕过2.2.2、绝对路径2.2.3、使用..\ 3、任意文件读取挖掘3.1、手工挖掘3.2、案例 4、漏洞修复方案4.1、输入验证4.2、避免其他漏洞4.3、限定文件的访问范围 1、概述
一些网站的需求可能会提供文件查看与下载的功能。如果对用户查看或下载的文件没有限制或者限制绕过就可以查看或下载任意文件。这些文件可以是源代码文件配置文件敏感文件等等。
任意文件读取会造成敏感信息泄露任意文件读取大多数情况是由于其他漏洞引发的如RCE、目录遍历、文件包含等。任意文件读取与任意文件下载本质上没有区别信息都是从服务端流向浏览器的。
任意文件读取与下载可能形式不同但是从本质上讲读取与下载没有区别从权限角度来讲读取与下载都需要读权限
1.1、漏洞成因
不管是任意文件读取还是任意文件下载触发漏洞的条件都是相同的
存在读取文件的功能函数也就是说Web 应用开放了文件读取功能读取文件的路径客户端可控完全控制或影响文件路径参数没有对文件路径进行校验或者校验不严导致校验被绕过输出了文件的内容
1.2、漏洞危害
下载服务器任意文件包括源代码文件、系统敏感文件、配置文件等等。
可以配合其他漏洞构成完整攻击链。对源代码文件进行代码审计查找更多的漏洞。
任意文件读取与下载重点关注的文件
源代码配置文件敏感文件日志文件。。。。
1.3、漏洞分类
任意文件读取任意文件下载
1.4、任意文件读取
以PHP 脚本为例子有一些函数可以实现文件读取功能。
1.4.1、文件读取函数
相关函数特点readfile()直接读取文件内容自带输出功能file_get_contents()直接读取文件内容需要输出读取内容fread()打开文件计算文件大小读取文件输出文件关闭文件
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);1.4.2、任意文件读取
变量$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通过文件读取方式读取到 的文件内容不会直接显示在页面上不会 解析php代码呈现在页面上而是以源码的方式显示在页面源代码中可以右键查看页面源代码
1.5、任意文件下载
1.5.1、一般情况
直接下载例如图片另存为
a 标签下载
a href ./a.jpg点击下载图片/a1.5.2、PHP实现
PHP 文件下载实现过程
先读取文件在输出文件提供下载
// file-download.php$fp ./a.jpg;
header(Content-Type:image/jpg);
header(Content-Disposition:attachment;fileName.basename($fp));
readfile($fp);1.5.3、任意文件下载
任意文件下载的条件
已知目标文件路径目标文件路径客户端可控没有经过校验或校验不严格
$fp $_GET[filepath];2、任意文件读取攻防
2.1、路径过滤
2.1.1、过滤…/
$fp $_GET[filepath];
$fp str_replace(../,,$fp);
readfile($fp);2.2、简单绕过
2.2.1、双写绕过
?filepath..././..././..././..././..././..././..././windows\system32\drivers\etc\hosts2.2.2、绝对路径
?filepathc:/windows\system32\drivers\etc\hosts2.2.3、使用…\
?filepath..\..\..\..\..\windows\system32\drivers\etc\hosts3、任意文件读取挖掘
3.1、手工挖掘
从文件名上看从参数上看readfile.phpfiledownload.phpfilelist.phpffilefilepathfpreadfilepathreadpathurlmenuMETA-INFWEB-INFcontent…
3.2、案例
metinfo_6.0.0_readfile
4、漏洞修复方案
4.1、输入验证
让web 用户只能访问读取所需要的文件和路径。
4.2、避免其他漏洞
不能有文件包含漏洞目录遍历漏洞或其他漏洞
4.3、限定文件的访问范围
让用户不能访问Web 根目录以外的路径。php.ini 配置文件中可以通过选项open_basedir 来限定文件访问的范围
open_basedir c:\www\