任意文件读取
通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感信息文件正常读取的文件没有经过校验或者不严格,用户可以控制这个变量读取任意文件
漏洞危害
任意文件读取漏洞,是web安全里高危的漏洞,它可以泄露源码数据库配置文件等等,导致网站处于极度不安全状态。
漏洞挖掘思路
fopen() 需要php.ini开启allow_url_fopen = On 开启
file_get_contents()
fread
fgets
fgetss
file
fpassthru
parse_ini_file
readfile
文件结构
去访问一下1.txt ,看到内容111 正确
读取config目录下的文件,
第一种形式
要记住,审计的时候,进行一个全局搜索
这时以上,常见的 三种形式 file_get_contents()、 fopen($filename,"r")r只读 、readfile()
漏洞之所以会发生是因为攻击者可以将路径遍历序列放入文件名内,从当前位置向上回溯,从而浏览整个浏览器的的任何文件
任意文件删除
攻击者从寻找上删除的功能,正常删除功能的文件没有经过校验或者不严格,攻击者控制这个可操作的变量配合目录遍历进行删除其他文件
文件删除 --- 代码案例
unlink()函数
$filename = $_GET['file'];
if(file_exists($filename)){
unlink($filename);
echo "<script>alert('删除成功')</script>";
}else{
echo "<script>alert('删除失败')</script>";
}
file_exists() 判断代码是否存在
xxx?file=1.txt 删除了 同级目录下的1.txt
xxx?file = ./config/admin.php 就删除了 config目录下的admin.php文件
修复方案
正则严格判断用户输入参数的格式
检查使用者输入的文件名是否有“..”的目录阶层字符
在php.ini文件中设置open basedir来限定文件访问的范围
也是前面提到的目录穿越,也要做好修复