DVWA——File inclusion漏洞

姓名:贾昊龙

学号:18307130049

Background

开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为“包含”(include)。

通常,所包含的文件是“写死”的。但是如果可在执行中,动态确定所要包含的文件,将显著增加灵活性。

然而灵活性增加的同时,也带来安全隐患

漏洞条件

参考blog:文件包含漏洞

当服务器php配置中开启allow_ url include时,可以通过php的某些特性函数(include(),require(),include once()和 require once())利用url去动态包含文件。如果没有对文件来源进行严格审查,就会导致加载恶意文件。
文件包含漏洞分为本地文件包含漏洞远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow urlr fopen选项,该选项开启以后,服务器允许包含一个远程文件。
需要说明的一点是,包含文件时,不管文件后缀是不是php,都会尝试当做php文件执行,如果内容是php,会正常执行并打印结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。 include:包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php.文件继续执行。require:跟include不同的是,当产生错误的时候,include 下面继续运行而require 停止运行了。

配置环境

首先在自己的服务器(windows server)上搭建xampp,(apache+mysql),并在相应目录下安装

DVWA的项目,成功的可以访问到DVWA环境。对于在file inclusion中提示的 allow_url_include:已禁用 的问题应该在本地对于的php代码中将其php.ini 中相应的权限开启即可

low level

<?php

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

?>

通过源码可以看到文件包含是在url通过GET传参的方式获取文件,经过测试发现可以直接获取服务器文件路径:

1

接下来,尝试进行包含本地文件

2

无论文件后缀名是什么,只要文件内容为php脚本都会正确解析并且执行

Mid level

继续来看中级的源码

<?php

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

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

?>

会发现对于输入进行来检查并且会进行相应替换,我们可以采用double input来进行攻击。本地文件包含:….//….//绕过过滤,远程文件包含:httphttp://://

High level

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

?>

分析源代码可知道将 str_replace替换为 fnmatch ,保证服务器只能够通过 file协议来获取文件。

所以这里并不能通过http协议来进行访问远程文件,通过file可以看到对应的文件内容

3


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

安全综合攻防实验2 上一篇
meltdown lab 下一篇