zoukankan      html  css  js  c++  java
  • 文件包含漏洞

    简述

    程序员将一些可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般称为文件包含。

    而文件包含漏洞就是文件包含函数加载的参数没有经过过滤,可以被攻击者控制,包含了其他恶意文件,执行了恶意代码。

    php中的文件包含函数

    include()
    include_once()
    require()
    require_once()
    

    include和require函数的区别:include在文件包含过程中如果出现错误,会抛出警告,程序继续执行,而require则会抛出一个致命错误,退出程序执行。

    include_once和require_once,是只包含一次,适用于程序执行过程中一个文件可能被包含超过一次的情况下,只被包含一次以避免函数重定义,变量重新赋值等问题。

    漏洞分类及其原理

    1.本地文件包含漏洞

    就是能够打开并包含本地文件的漏洞。

    示例:

    //index.php
    <?php
      $filename = $_GET['filename'];
      include($filename);
    ?>
    
    //info.php
    <?php
      phpinfo();
    ?>
    

    因为filename直接传入到incldue()函数中,所以可以控制filename直接访问到想访问的内容:

    2.远程文件包含漏洞

    是能够包含远程服务器上的文件并执行的漏洞。

    利用条件:配置中的allow_url_fopen和allow_url_include需要为on。

    allow_url_fopen:on 默认开启,该选项为on便是激活了URL形式的fopen封装协议使得可以访问URL对象文件等。

    allow_url_include:off 默认关闭,该选项为on便是允许包含URL对象文件等。

    php伪协议

    1.file://协议

    用于访问本地文件系统,不受allow_url_fopen和allow_url_include的影响。

    用法:file://[文件的绝对路径和文件名]

    http://192.168.1.7/testfile/index.php?filename=file://C:/windows/system.ini
    

    2.zip://协议

    可以访问压缩文件中的子文件,不需要指定后缀名。不受allow_url_fopen和allow_url_include的影响。

    用法:zip://[压缩文件绝对路径]#[压缩文件内的子文件名]

    http://192.168.1.7/testfile/index.php?filename=zip://C:/phpStudy/PHPTutorial/WWW/testfile/info.zip%23info.php
    

    如果对zip的文件格式有限制,压缩后可以改成其他格式:

    http://192.168.1.7/testfile/index.php?filename=zip://C:/phpStudy/PHPTutorial/WWW/testfile/info.jpg%23info.php
    

    3.php://协议

    不需要开启allow_url_fopen,仅php://input、php://stdin、php://memory和php://temp需要开启allow_url_include。

    ①php://filter :读取源代码并进行base64编码输出。

    http://192.168.1.7/testfile/index.php?filename=php://filter/read=convert.base64-encode/resource=info.php
    

    4.data://协议

    需要开启allow_url_fopen和allow_url_include,和php://input类似,可以执行任意代码。

    用法1:data:text/plain,php代码

    用法2:data:text/plain;base64,编码后的php代码

    5.phar://伪协议

    这个参数是就是php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压。(压缩包需要是ZIP协议压缩)

    用法:phar://[压缩文件路径]/[压缩文件内的子文件名]

    http://192.168.1.7/testfile/index.php?filename=phar://C:/phpStudy/PHPTutorial/WWW/testfile/info.zip/info.php
    

    参考链接

    https://www.cnblogs.com/iamstudy/articles/include_file.html

    https://www.freebuf.com/articles/web/182280.html

    https://blog.csdn.net/weixin_42277564/article/details/80641849

    https://xz.aliyun.com/t/7176

    https://www.freebuf.com/column/148886.html

  • 相关阅读:
    解决问题,别扩展问题
    Hystrix 配置参数全解析
    请求合并哪家强
    在Spring-Boot中实现通用Auth认证的几种方式
    Java高级特性之泛型
    一键部署进化史
    JavaScript Alert 函数执行顺序问题
    新版的 Springsecurity request.getRequestDispatcher).forward(request, response); 404 问题,已解决
    maridb 10.3 主从复制,待机情况下从库 cpu 占用率高的处理方法
    springboot 2.0 mariadb hikari-cp连接池
  • 原文地址:https://www.cnblogs.com/Son01/p/12955244.html
Copyright © 2011-2022 走看看