DVWA File Inclusion

目录

背景

allow_url_fopen 配置项

allow_url_include 配置项

函数

文件包含

概念

DVWA

LOW

实验环境

源码分析

​编辑

步骤

MEDIUM

源码分析

​编辑

 HIGH

源码分析

file协议

概念

格式

浏览器通过file://访问文件和http://访问文件的区别

注意


背景

allow_url_fopen 配置项


allow_url_fopen 是 PHP 中的一个配置选项,它决定了 PHP 是否能够通过 URL  而非本地文件路径 来打开文件。具体来说,当 allow_url_fopen 被设置为 On时,通过某些函数可以用来 读取 或 写入 远程文件。而当该配置项被设置为 Off时,只能用于操作本地文件

allow_url_include 配置项

allow_url_include 是 PHP 的一个配置指令,与 allow_url_fopen 类似,但 allow_url_include 配置专门针对 PHP 的 include、include_once、 require 及 require_once 语句。当 allow_url_include 被设置为 On 时,PHP 允许通过 URL 的形式,从远程服务器 包含和执行 PHP 文件

allow_url_include 的生效依赖于 allow_url_fopen 配置项的开启。具体而言,当 allow_url_include 与 allow_url_fopen 两个配置项均被开启时,allow_url_include 才能够发挥作用。若仅有 allow_url_include 配置项被开启,则无法发挥 allow_url_include 配置项所起到的功能。

函数

equire():可以包含文件,如果包含错了,直接报错并退出程序的执行
include():在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require_once():与require类似,区别在于当重复调用同一文件时,程序只调用一次
include_once():与include类似,区别在于当重复调用同一文件时,程序只调用一次

文件包含

概念

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

文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地(LFI)和远程文件包含(RFI)漏洞,远程是因为开启了allow_url_fopen。

PHP文件包含漏洞是一种注入型漏洞
注入型漏洞还有XSS漏洞和SQL注入漏洞

PHP的文件包含可以直接执行包含文件的代码
包含的文件格式 是不受限制的,只要能正常执行即可

DVWA

LOW

实验环境

一开始会显示The PHP fuction allow_url_include is not enabled

在根目录里找到php.ini文件,将allow_url_fopen=off和allow_url_include=off都改成on就可以了

具体参考关于DVWA靶场File Inclusion中出现The PHP function allow_url_include is not enabled解决办法-CSDN博客

源码分析

没有做任何过滤,可以直接获取page参数 

用 GET 方法接收文件路径,然后将其包含进来。服务器包含文件时,无论文件是否是 PHP 文件,都会尝试当做 PHP 文件来执行。如果文件内容确实是 PHP 文件,则会正常执行并返回结果,如果不是则会将文件内容回显到网页中,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

步骤

服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回 

服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行。

 点击file1发现url中的page参数值就是file1 

可以尝试用/访问下级目录 ,然后构建URL访问别的文件(相对路径)

../../phpinfo.php

也可以在D盘里建一个txt文件(绝对路径)

在url里面尝试上传包含本地文件  

成功输出k.txt文件内容

MEDIUM

源码分析

增加了 str_replace 函数对 page 参数进行了过滤。将 http://https://替换为阻止远程包含漏洞,将../..\ 替换为阻止用相对路径访问文件。

相对路径双写绕过就行,比如..././

 绝对路径不受影响

 HIGH

源码分析

 fnmatch函数:

 要求page参数的开头必须是file,服务器才会去包含相应的文件

可以使用file协议绕过这个限制

file协议

概念

File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。

格式

文件URI的形式为

file:// host / path

file://机器的IP地址/目录/文件,例如要打开D盘images文件夹中的111.png文件,那么可以在资源管理器或IE地址栏中键入file://127.0.0.1/D:/images/111.png 然后回车。

如果省略host则将其视为localhost,即从其解释URL的计算机。省略主机时,不会省略斜杠(“file:///abc.txt”有效,“file://abc.txt”无效)

URI的结构为:

scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]

对于本地机器,机器的IP地址可变成127.0.0.1或localhost或什么也不写。

“/”符号一个都不能少。

浏览器通过file://访问文件和http://访问文件的区别

file协议用于访问本地计算机中的文件,好比通过资源管理器中打开文件一样,需要主要的是它是针对本地的,即file协议是访问你本机的文件资源。

http访问本地的html文件,相当于将本机作为了一台http服务器,然后通过localhost访问的是你自己电脑上的本地服务器,再通过http服务器去访问你本机的文件资源。

file只是简单请求了本地文件,将其作为一个服务器未解析的静态文件打开。而http是在本地搭建了一个服务器再通过服务器去动态解析拿到文件。

其他区别:

file协议只能在本地访问
本地搭建http服务器开放端口后他人也可以通过http访问到你电脑中的文件,但是file协议做不到
file协议对应有一个类似http的远程访问,就是ftp协议,即文件传输协议。
file协议无法实现跨域

注意

file:///后面一定是绝对路径
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值