任意文件读取及删除漏洞

任意文件读取漏洞及危害

通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感信息文件,正常读取的文件没有经过校验或者不严格,用户可以控制这个变量读取任意文件。

任意文件读取漏洞,是web安全里高危的漏洞,它可以泄露源码、数据库配置文件等等,导致网站处于极度不安全状态。

文件读取常见的函数

  1. fopen
  2. file_get_contents
  3. fread
  4. fgets
  5. fgetss
  6. file
  7. fpassthru
  8. parse_ini_file
  9. readfile

注意: allow_url_fopen选项激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象例如文件。默认的封装协议提供用ftp 和 http 协议来访问远程文件,一些扩展库例如 zlib 可能会注册更多的封装协议

代码展示

<?php
    $filename = $_GET['file'];
    if(isset($filename)) {
        readfile($filename);
    }

这里使用了常见的readfile函数直接读取传入变量对应的文件内容,在本地文件夹下新建了1.txt和config文件夹下的2.txt用于测试
在这里插入图片描述
查看本地文件配置的敏感信息./config/admin.php
在这里插入图片描述
另一种读取文件的方法,这里使用的是打开文件和读取文件的方式,然后输出文件的内容

demon03.php

<?php
    $filename = $_GET['file'];
    if(isset($filename)) {
//        readfile($filename);
        $fp = fopen($filename,"r") or die("不能读取文件");
        $data = fread($fp,filesize($filename));
        fclose($fp);
        echo $data;
    }

效果一样
在这里插入图片描述

任意文件删除漏洞

攻击者从寻找上删除的功能,正常删除功能的文件没有经过校验或者不严格,攻击者控制这个可操作的变量配合目录遍历进行删除其他文件。这里涉及到一个unlink()函数,这个函数的作用是删除对应的文件及文件内容。

demon04.php

<?php
    header("Content-Type:text/html;charset=utf-8");
    $filename = $_GET['file'];
    if(file_exists($filename)){
        unlink($filename);
        echo "<script>alert('删除成功')</script>";
    }else{
        echo "<script>alert('删除失败')</script>";
    }

在这里插入图片描述
执行查询后,文件被删除成功了
在这里插入图片描述
在这里插入图片描述

修复方案

  1. 正则严格判断用户输入参数的格式
  2. 检查使用者输入的文件名是否有“…”的目录阶层字符
  3. 在php.ini文件中设置open_basedir来限定文件访问的范围
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值