web基础—dvwa靶场(四)​File Inclusion

File Inclusion(文件包含)

有些 web 应用程序允许用户指定直接文件流的输入,或允许用户将文件上载到服务器。稍后 web 应用程序访问 web 应用程序上下文中用户提供的输入。通过这样种操作,web 应用程序允许恶意文件执行。
如果选择要包含的文件是目标计算机上的本地文件,则称为“本地文件包含(LFI)”。但是文件也可能包含在其他机器上,这样的攻击就是“远程文件包含(RFI)”。
当 RFI 不是一个选项时。在 LFI 中使用另一个漏洞(例如文件上传和目录遍历)通常可以达到相同的效果。注意术语“文件包含”与“任意文件访问”或“文件泄漏”不同。
请在仅使用文件包含的情况下,阅读 “../hackable/flags/fi.php” 中的五句名言。

Low Level

这允许直接输入到许多 PHP 函数中的一个,这些函数将在执行时包含内容。RFI 是否可行取决于 web 的服务配置。

源码审计

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

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

例如靶场提供了 3 个文件,单击这些文件就会显示其执行内容,同时 url 也会用 GET 方法传递参数。

攻击方式

page 参数指的是文件路径,因此我们先传个不存在的文件名测试一下,看看有没有报错信息。传递 page 参数为 “1.php”,靶场报错并返回了文件所在的路径。

Warning: include(1.php): failed to open stream: No such file or directory in D:\DVWA-master\vulnerabilities\fi\index.php on line 36
Warning: include(): Failed opening '1.php' for inclusion (include_path='.;C:\php\pear;../../external/phpids/0.6/lib/') in D:\DVWA-master\vulnerabilities\fi\index.php on line 36

因此我们直接用相对路径,访问上两级文件夹下的 “fi.php'” 文件,构造出 payload。

?page=..\..\hackable\flags\fi.php

漏洞复现

(1)先点击下面的链接,进行尝试,可以看到有结果直接返回了

 (2)这个地方因为我知道他的phpinfo.php文件在他的前两级目录文件中,所以我在这里就直接进行尝试了(本地包含)

 (3)尝试一下包含百度页面,发现直接成功了(远程包含)

Medium Level

开发人员已经阅读了 LFI/RFI 的一些问题,并决定过滤输入,然而他所使用的过滤还不够。

源码审计

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

<?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 函数替换后的 page 参数是文件路径即可。

?page=...\.\...\.\hackable\flags\fi.php

漏洞复现

构造一个新的

hthttp://tp://www.baidu.com

过滤后

http://www.baidu.com

过滤前

…/./

过滤后

../

High Level

开发者已经受够了,他们决定只允许使用某些文件。但是由于存在多个具有相同基名的文件,因此它们使用通配符将它们全部包括在内。

源码审计

源码如下,使用 fnmatch 根据指定的模式来匹配文件名或字符串。该函数将检查 page 参数开头必须是否是 file,若是服务器才会去包含相应的文件。

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

攻击方式

虽然是只能包含 file 开头的文件,但是实在太巧合了,我们依然可以利用 file 伪协议读取到文件内容。

?page=file:///D:\DVWA-master\hackable\flags\fi.php 

漏洞复现

  使用伪协议:file://  (访问本地文件系统)(伪协议文章参考:https://blog.csdn.net/Wu000999/article/details/101925271)

Impossible Level

开发人员只对允许的页面进行硬编码,并提供精确的文件名,这样做消除了所有的攻击途径。

<?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.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

总结与防御

为了更好地使用代码的重用性,可以使用文件包含函数将文件包含进来,直接使用文件中的代码来提高重用性。但是这也产生了文件包含漏洞,产生原因是在通过 PHP 的函数引入文件时,为了灵活包含文件会将被包含文件设置为变量,通过动态变量来引入需要包含的文件。此时用户可以对变量的值可控,而服务器端未对变量值进行合理地校验或者校验被绕过,就会导致文件包含漏洞。常用的文件包含函数有 include()、include_once()、require()、require_once()。
包含漏洞分为本地包含和原创包含 2 类,当包含的文件在服务器本地时,就形成了本地文件包含。文件包含可以包含任意文件,被包含的文件可以不是 PHP 代码,可以是文本或图片等。只要文件被包含就会被服务器脚本语言执行,如果包含的文件内容不符合 php 语法,会直接将文件内容输出。例如下面这段简易的代码:

<?php$file = $_GET['file'];include($file);
?>

当包含的文件在远程服务器上时,就形成了远程文件包含。所包含远程服务器的文件后缀不能与目标服务器语言相同,远程文件包含需要在 php.ini 中设置:

allow_url_include = on(是否允许 include/require 远程文件)
allow_url_fopen = on(是否允许打开远程文件)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Hot100】LeetCode—51. N 皇后

目录 1- 思路题目识别回溯 2- 实现⭐51. N 皇后——题解思路 3- ACM 实现 原题链接&#xff1a;51. N 皇后 1- 思路 题目识别 识别1 &#xff1a;给定一个整数 n &#xff0c;求解如何放置棋子的问题。 回溯 回溯三部曲 1- 回溯参数和返回值 传参 cheeseBoard、n、row 传递…

如何设置 Django 错误邮件通知 ?

Django 是一个强大的 web 框架&#xff0c;非常适合那些想要完美快速完成任务的人。它有许多内置的工具和特性&#xff0c;一个有用的特性是 Django 可以在出现错误时发送电子邮件提醒。这对开发人员和管理员非常有用&#xff0c;因为如果出现问题&#xff0c;他们会立即得到通…

改编pikachu的打靶经历(题目不全)

前言 题目很少&#xff0c;只做了一些。正常版本的&#xff0c;完整的pikachu可参考下面这个师傅写的 https://www.cnblogs.com/henry666/p/16947270.html xss &#xff08;get&#xff09;反射xss 先尝试 1 这里有长度限制&#xff0c;而且&#xff0c;我改了长度&#xf…

MySQL_数据类型简介

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

文生视频算法

文生视频 Sora解决问题&#xff1a;解决思路&#xff1a; CogVideoX解决问题&#xff1a;解决思路&#xff1a; Stable Video Diffusion&#xff08;SVD&#xff09;解决问题&#xff1a;解决思路&#xff1a; 主流AI视频技术框架&#xff1a; Sora Sora: A Review on Backg…

Double Write

优质博文&#xff1a;IT-BLOG-CN 一、存在的问题 为什么需要Double Write&#xff1a; InnoDB的PageSize是16kb&#xff0c;其数据校验也是针对这16KB来计算的&#xff0c;将数据写入磁盘是以Page为单位的进行操作的。而计算机硬件和操作系统&#xff0c;写文件是以4KB作为基…

新能源汽车充电基础设施大爆发

新能源汽车充电基础设施迈入新阶段&#xff1a;全国总量破千万&#xff0c;未来五年将翻番增长 截至2024年7月底&#xff0c;全国充电设施总量已达到1060万台&#xff0c;为超过2500万辆新能源汽车提供了充电服务。目前&#xff0c;95%的高速公路服务区已具备充电功能&#xf…

MySql的基础讲解

一、初识MySql 数据库&#xff1a;按照数据结构来组织、存储和管理数据的仓库&#xff1b;是一个长期存储在计算机内的、有组织的、可共享 的、统一管理的大量数据的集合&#xff1b; OLTP&#xff1a;联机事务处理&#xff0c;主要是对数据库的增删改查。 OLTP 主要用来记录…

禁忌搜索算法(TS算法)求解实例---旅行商问题 (TSP)

目录 一、采用TS求解 TSP二、 旅行商问题2.1 实际例子&#xff1a;求解 6 个城市的 TSP2.2 **求解该问题的代码**2.3 代码运行过程截屏2.4 代码运行结果截屏&#xff08;后续和其他算法进行对比&#xff09; 三、 如何修改代码&#xff1f;3.1 减少城市坐标&#xff0c;如下&am…

关于安卓App自动化的一些想法

安卓App自动化一般使用PythonAppium。页面元素通常是使用AndroidStudio中的UI Automator Viewer工具来进行页面元素的追踪。但是这里涉及到一个问题就是&#xff0c;安卓apk在每次打包的时候&#xff0c;会进行页面的混淆以及加固&#xff0c;所以导致每次apk打包之后会出现页面…

(c++)字符串相加(真没想到字符串还有相加运算)

#include<iostream> #include<string> using namespace std;int main() {string ch1 "你好";string ch2 "再见";string ch3 ch1 ch2;cout << ch3 << endl;system("pause");return 0; } 运行结果&#xff1a; 学了c…

Qt与Udp

(1)绑定端口 (2)广播 用udp实现广播通信_udp广播-CSDN博客 数据的发送是面向整个子网的&#xff0c;任何一台在子网中的计算机都可以接收到相同的数据。 如果一台机器希望向其他N台机器发送信息&#xff0c;这时候可以使用UDP的广播。 --------------- 广播地址&#xff1…

云计算和虚拟化技术 背诵

https://zhuanlan.zhihu.com/p/612215164 https://zhuanlan.zhihu.com/p/612215164 云计算是指把计算资源、存储资源、网络资源、应用软件等集合起来&#xff0c;采用虚拟化技术 &#xff0c;将这些资源池化&#xff0c;组成资源共享池&#xff0c;共享池即是“云”。 云计算…

C++ | Leetcode C++题解之第406题根据身高重建队列

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {sort(people.begin(), people.end(), [](const vector<int>& u, const vector<int>& v) …

LeetCode[中等] 189.轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 思路 创建一个新数组&#xff0c;存储原数组旋转后的元素&#xff0c;然后将新数组中的元素复制回原数组。 public class Solution {public void Rotate(int[] nums, int k)…

二叉搜索树与双向链表

描述 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围&#xff1a;输入二叉树的节点数 0≤n≤10000≤n≤1000&#xff0c;二叉树中每个节点的值 0≤val≤10000≤val≤1000 要求&#xff1a;空间复杂度O(1)O(1)&#xff08;即在原…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 &#x1f378;前言 &#x1f37b;一、台式电脑基本组成 &#x1f37a;二、组装 &#x1f379;三、安装系统 &#x1f44b;四、系统设置 &#x1f440;五、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

浏览器插件利器--allWebPluginV2.0.0.20-beta版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

无人机之处理器篇

无人机的处理器是无人机系统的核心部件之一&#xff0c;它负责控制无人机的飞行、数据处理、任务执行等多个关键功能。以下是对无人机处理器的详细解析&#xff1a; 一、处理器类型 无人机中使用的处理器主要包括以下几种类型&#xff1a; CPU处理器&#xff1a;CPU是无人机的…

VMware Fusion虚拟机Mac版 安装Ubuntu操作系统教程

Mac分享吧 文章目录 下载镜像地址&#xff1a;[www.macfxb.cn](http://www.macfxb.cn)一、Ubuntu安装完成&#xff0c;软件打开效果二、Mac中安装Ubuntu虚拟机1️⃣&#xff1a;下载镜像2️⃣&#xff1a;创建虚拟机3️⃣&#xff1a;虚拟机设置4️⃣&#xff1a;虚拟机安装5️…