DVWA系列---File Inclusion 文件包含漏洞

文章目录

    • 前言
    • 一、Low
    • 二、Medium
    • 三、High
    • 四、Impossible

前言

文件包含:

文件包含是指为了提高开发效率,将不同功能写入到单独文件中,在需要使用该功能时,将相应的文件导入即可。

常见的文件包含函数:

  • require:找不到被包含的文件,报错,并且停止运行脚本。
    include:找不到被包含的文件,只会报错,但会继续运行脚本。
    require_once:与require类似,区别在于当重复调用同一文件时,程序只调用一次。
    include_once:与include类似,区别在于当重复调用同一文件时,程序只调用一次。

文件包含漏洞:

之所以会形成该漏洞,是由于开发人员在设计导入文件时,未对导入的文件做严格检查,导致用户自行指定导入的文件,尤其是指定一些恶意文件,对服务器造成破坏,这就是文件包含漏洞。

防御:

由于文件包含漏洞时由于在导入文件时,没有做细致过滤,因此,防御该攻击的方法,还是应该从服务器入手,对导入的文件做认真检查过滤,防止用户注入恶意文件。

一、Low

1、演示
打开DVWA文件包含靶场页面,发现URL包含了index.php,分别点击三个文件,URL中的page则分别为相应的文件
在这里插入图片描述
在桌面创建一个 1.txt 文件,内容为 查看php信息的php语句:

 phpinfo(); ?>

利用访问本地文件的 File 协议,将page的值改为 1.txt 的绝对路径:

file://C:\users\13714\Desktop\1.txt

回车发现已经成功访问并解析该文件,将txt文件解析为php文件
DVWA系列---File Inclusion 文件包含漏洞_第1张图片
也可以访问网络文件

将刚才的1.txt文件复制到网站的根目录下,此时的文件网络路径为:

http://127.0.0.1:8181/1.txt

更改page为该网络路径,成功访问解析
DVWA系列---File Inclusion 文件包含漏洞_第2张图片
也可以通过相对路径访问服务器文件,即 ./ 和 …/
DVWA系列---File Inclusion 文件包含漏洞_第3张图片

2、源码
DVWA系列---File Inclusion 文件包含漏洞_第4张图片
嗯。毫无过滤。

二、Medium

使用Low中的三种方法尝试,发现只有使用 File 协议访问本地文件时,才能成功,其余两种均失败。查看源码进一步分析:
DVWA系列---File Inclusion 文件包含漏洞_第5张图片
可见,源码中替换了网络协议 http:// 和 https:// 以及相对路径 …/ 和 …\。

由于 str_replace() 函数区分大小写,因此可以采用大小写混用绕过的方法。
(注:str_ireplace() 函数不区分大小写,相对更安全。)

如使用 Http等:Http://127.0.0.1:8181/1.txt
DVWA系列---File Inclusion 文件包含漏洞_第6张图片
也可以采用截断的方法,如:hthttp://tp://127.0.0.1:8181/1.txt,将中间的 http:// 替换,剩下的自己拼接成一个完整的 url
DVWA系列---File Inclusion 文件包含漏洞_第7张图片
类似的,也可以截断拼接相对地址:..././..././1.txt
DVWA系列---File Inclusion 文件包含漏洞_第8张图片

三、High

直接查看源码进行代码审计:



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

?> 

关键是这句:if( !fnmatch( "file*", $file ) && $file != "include.php" )

fnmatch()函数:匹配字符串,file* 是指以 file* 开头。

这句代码的意思:如果文件(路径)不是以 file 开头或文件不是 include.php,则失败。

因此,可以用 file 协议,来打开本地文件:
DVWA系列---File Inclusion 文件包含漏洞_第9张图片

四、Impossible



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

?> 

emmmm,直接就指定了四个文件,不可能有操作了。

你可能感兴趣的:(#,DVWA)