目录
(1)以PHP 脚本为例子,有一些函数可以实现文件读取功能。
一.原理
由于web页面需要提供文件查看或文件下载功能,对用户查看或下载的文件不做过限制条件,导致攻击者或者用户恶意的查看或下载任意敏感文件。
二·.条件
1、存在读取文件的函数
2、读取文件的路径用户可控且未校验或校验不严格
3、输出了文件内容
三.漏洞危害
系统敏感文件等。可下载服务器任意文件,包含脚本代码文件、源代码文件、配置文件、敏感文件等等,以配合其它类型的漏洞,可以进一步代码审计,查找更多可利用的代码。
不得不说学安全。想成为真正的大佬,还得会代码,成为真正的全能牛马。
为什么只能读,是因为他的代码只能读,不会去解析。\
四.相关函数
(1)以PHP 脚本为例子,有一些函数可以实现文件读取功能。
readfile():直接读取文件内容,自带输出功能
file_get_contents():直接读取文件内容,输出读取内容。
fread():读取文件,输出文件
(2)任意文件下载
先读取,在下载。
不会在正常页面上显示,会在源码里面显示出来,不被解析,直接呈现出来。
具体代码
<ahref="http://www.a.com/ccc.rar">下载</a>
<?php
if (empty($GET['filename'])){
exit();
}
$filename =$GET['filename'];
//以二进制方式下载,保证内容不出错
header('Content-Type:application/octet-stream');
//获取文件大小
header("Accept-Length:".filesize($filename));
//以附件的方式下载 需要结合读文件才能下载readfile($filename);
header('Content-Disposition:attachment;filename='.$filename);
readfile($filename);
?>
四.如何去看这个漏洞是哪个
?参数=(看这个参数,尝试通过../不停的返回上一级,然后访问一些铭感目录)
f=../../../../../../../../etc/passwd
f=../index.php
If=file:///etc/passwd
f=
file=
filepath=
fp=
readfile=
path=
readpath=
menu=
content=
五.当参数f的参数值为php文件时
1、若文件被解析则是文件包含漏洞,
2、若是显示源码,则是文件査看漏洞,
3、提示下载则是文件下载漏洞。
六.漏洞修复方案
1、过滤·点,使用户在ur|中不能回溯上级目录
2、正则严格判断用户输入的参数
3、php.ini配置open_basedir限定文件访问范围