DVWA—文件包含漏洞(File Inclusion)

DVWA—文件包含漏洞(File Inclusion)

DVWA—文件包含漏洞(File Inclusion)

原理

是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

分类

本地文件包含

通过浏览器包含web服务器上的文件,这种漏洞是因为浏览器包含文件时没有进行严格 的过滤允许遍历目录的字符注入浏览器并执行。
总的来说就是被包含的文件在服务器本地

远程文件包含

在远程服务器上预先设置好的脚本,然后攻击者利用该漏洞包含一个远程的文件,这种漏洞的出现是因为浏览器对用户的输入没有进行检查,导致不同程度的信息泄露、拒绝服务攻击 甚至在目标服务器上执行代码
简单的说就是被包含的文件在第三方服务器

low

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

服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确实为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

构造url:http://ip/filename?page=/a.txt,可见成功读取文件内容

发现直接是使用get方法,没有任何过滤,那么直接文件包含即可

?page=../../phpinfo.php

请添加图片描述

我们自己尝试一下:在同一目录下

E:\wangan\phpstudy_pro\WWW\DVWAmaster\vulnerabilities\fi)

创建b.php和c.txt,让b.php来包含c.txt

写一个简单的存在include()这个函数的PHP代码,用 id来当接受值:

image-20220608015613104
请添加图片描述
请添加图片描述
包含成功

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() 函数以其他字符替换字符串中的一些字符(区分大小写)

发现过滤了http://https://../..\
那么我们可以用大小写绕过http和双写绕过httphttp://://
或者使用..././..././经过过滤最后还是../../

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

fnmatch() 函数根据指定的模式来匹配文件名或字符串。

代码中使用了fnmatch()函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。
利用该特点,在Windows平台下可以使用file协议绕过防护策略。注意:fnmatch 函数适用于 PHP >= 4.3.0,因此 php 版本高于这个才能利用

                       

点击阅读全文

上一篇 2023年 5月 27日 am11:10
下一篇 2023年 5月 27日 am11:10