low
low等级,对文件包含行为毫无设防。
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
根据代码可以得知:
1.URL参数输入,没有经过任何的过滤和检查,原封不动进行文件包含,并将结果返回。
2.如果是php文件将导致任意命令执行,如果不是php文件将导致任意文件读取。
本地文件包含:
在D盘建一个记事本,内容随便打
可以看到成功输出1.txt文件内容,这里需要提一下的是无论文件后缀名是什么,只要文件内容为php脚本都会正确解析并且执行
远程文件包含
我们在本地www目录下新建1.php ———> 写入<?php phpinfo();?>
我们输入网址:
http://127.0.0.1/DVWA/vulnerabilities/fi/?
page=http://127.0.0.1/1.php
[
果然,外部包含文件成功,这样的话我们可以在1.php代码中写入恶意代码,拿到服务器的webshell
medium
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 );
?>
根据代码可以得知
1.URL参数输入,存在简单的过滤和检查。
2.用户输入部分使用str_replace()函数过滤,过滤(http://,https://,…/,…\)
3.可以使用双写绕过防护措施,并且过滤非法字符是一种黑名单策略,这种策略不安全。
4.过滤措施对使用绝对路径方式进行文件包含无效。
本地文件包含:
跟LOW级的没什么区别,过滤措施对使用绝对路径方式进行文件包含无效
远程文件包含
http://127.0.0.1/DVWA-master/vulnerabilities/fi/page=httphttp://😕/127.0.0.1/1.php
High
hight等级,对命令注入行为有一定防护,但有疏忽。
<
?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;
}
?>
根据代码可以得知
1.URL参数输入,存在较严格的过滤和检查。
2.用户输入部分使用fnmatch()函数过滤,规定包含的文件名仅可以file开头。
3.可以使用file协议,绕过防护措施,并且过滤是一种黑名单策略,这种策略不安全。
4.过滤措施造成远程文件包含无法进行,但仍存在本地文件包含的风险。
本地文件包含:
在此级别中,服务对参数进行了筛选,要求参数必须是file开头的文件才会包含
利用Windows的file协议进行包含
远程文件包含:无法绕过,已失效。可考虑在上传漏洞方向突破
Impossible
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;
}
?>
根据代码可以得知
1.URL参数输入,存在白名单过滤。
2.参数内容为“include.php”、“file1.php”、“file2.php”、“file3.php”之一。
3.白名单策略,彻底杜绝了文件包含漏洞。