DVWA学习日记-文件包含(File Inclusion)

文件包含(File Inclusion),一种代码处理方法,函数如include,requirede等参数名是文件名

漏洞文件名参数用户可控且过滤不严,被攻击者偷梁换柱。

准备首先在php.ini设置打开设置配置文件,在在配置文件中将allow_url_include =On 、allow_url_open=On
DVWA学习日记-文件包含(File Inclusion)

Low级别


<?php

// The page we wish to display
$file = $_GET[ 'page' ];

?>

可以看到服务器端对page参数没有做任何过滤。
首先我们按照正常流程依次点击file1.php、file2.php、file3.php发现DVWA学习日记-文件包含(File Inclusion)
即page参数的值是可控的,于是我们做一些尝试——访问test.php
DVWA学习日记-文件包含(File Inclusion)提示了出错信息找不到文件,表明我们可以利用文件包含漏洞并爆出了绝对路径表明我们可以利用文件包含漏洞
远程文件包含
在远程服务器127.0.0.1中上传一个phpinfo.txt文件
构造url
http://192.168.147.1/DVWA-master/vulnerabilities/fi/?page=http://127.0.0.1/phpinfo.txt

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函数
…/./

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级别用fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会包含相应文件。
我们可以用file协议绕过来执行本地文件
File协议主要用于访问本地计算机中的文件基本格式如图file:///文件路径。
至于执行任意命令,需要配合文件上传漏洞,先上传文件后再利用file协议去包含

Impossible级别

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

?>

可以看到Impossible级别采用白名单机制进行防护,杜绝了文件包含漏洞

修复

黑名单× 容易被绕过
白名单√

上一篇:DVWA中low级别的SQL注入


下一篇:DVWA学习记录