网安入门14-文件包含(file:// )

什么是文件包含漏洞——来自ChatGPT4

文件包含漏洞是指应用程序在加载文件时,允许用户控制被加载文件的名称,从而导致恶意代码的执行或敏感信息的泄露。文件包含漏洞主要分为两种:

  1. 本地文件包含漏洞(LFI) :攻击者可以包含服务器本地的任意文件,包括系统文件、配置文件、数据库文件等。
  2. 远程文件包含漏洞(RFI):攻击者可以包含远程服务器上的任意文件,包括其他网站的文件、恶意网站的文件等。

文件包含漏洞的危害性很大,攻击者可以利用该漏洞来执行以下操作:

  • 执行任意代码:攻击者可以通过包含恶意的 PHP 脚本或其他可执行文件来执行任意代码,从而控制服务器。
  • 窃取敏感信息:攻击者可以通过包含包含敏感信息的文件来窃取用户的密码、信用卡信息等敏感信息。
  • 植入后门:攻击者可以通过包含包含后门的文件来植入后门,从而方便日后进行攻击。

以下是一些防范文件包含漏洞的措施:

  • 在开发应用程序时,应使用白名单的方式来控制用户输入的文件名称,仅允许包含白名单中指定的文件。
  • 在开发应用程序时,应对用户输入的文件名称进行严格的过滤,确保文件名称不包含任何特殊字符,例如 ../ 等。
  • 关闭不必要的功能,例如远程文件包含功能。

为了防范文件包含漏洞,开发人员应在开发应用程序时严格控制用户输入,对用户输入的文件名称进行严格的过滤,确保只有合法的文件才能被包含。

我的理解

程序员在开发过程中为了方便,在1.php页面中直接使用2.php的内容,形成文件包含,包含后可以直接使用被包含的代码,避免重复造轮子,就造成了漏洞

前提条件介绍

在这里插入图片描述

PHP语言所提供的文件包含功能太强大、太灵活,所以大部分的文件包含的漏洞都出现在PHP的程序中。

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

远程包含需要开启php配置的allow_url_include=on

php配置

php.ini里有两个参数
allow_url fopen:允许url里的封装协议访问文件(默认ON)
allow url include:允许包含url里的封装协议包含文件(默认OFF)

本地文件包含漏洞

<?php      #如果这里$GET['filename']攻击者可控,且未经过过滤那么就会导致漏洞。
$filename =$_GET['filename']; 
include($filename);
?>
函数说明
include包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。
include_once与include 不同处在于 include_once 会检查这个文件是否已经被导入,如已导入便不会再导入,直面 once 理解就是只导入一次。
require包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。
require_once和 require 类似,不同处在于 require_once 只导入一次。

被以上函数包含的文件一律按.php后缀解析!
这样就可以直接使用图片马了
实战中,黑盒测试看到?file=参数,直接先尝试/etc/passwd

file://协议

条件
  • allow_url_fopen:off/on
  • allow_url_include:off/on
作用

用于访问本地文件系统

说明

用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响。

用法
  1. file://[文件的绝对路径和文件名]:?file=file://D:/xxxx/1.txt
    127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt

  2. file=[文件的相对路径和文件名]:?file=./1.txt
    127.0.0.1/include.php?file=./phpinfo.txt

  3. file=[http://网络路径和文件名]:?file=http://127.0.0.1/1.txt
    127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt

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

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

相关文章

jmeter和meterSphere如何使用第三方jar包

工具引用jar包语言都是beanshell 问题起因&#xff1a;metersphere 接口自动化实现过程中&#xff0c;如何实现字符串加密且加密方法依赖第三方库&#xff1b; 使用语言&#xff1a;beanshell脚本语言&#xff0c;java语言 使用工具&#xff1a;idea jmeter metersphere 1.首…

docker图形化工具portainer

记录一个swarm部署portainer的方式 官网&#xff1a;https://www.portainer.io/ 编写yml version: 3.2services:agent:image: portainer/agent:2.0.0volumes:- /var/run/docker.sock:/var/run/docker.sock # 替换为自己docker的sock文件路径- /applications/docker/volumes:/v…

54.Spring的AOP是在哪里创建的动态代理?

54.Spring的AOP是在哪里创建的动态代理? 正常的Bean会在Bean的生命周期的‘初始化’后, 通过BeanPostProcessor.postProcessAfterInitialization创建aop的动态代理还有一种特殊情况: 循环依赖的Bean会在Bean的生命周期‘属性注入’时存在的循环依赖的情况下, 也会为循环依赖…

基于K-Means聚类算法与随机森林模型评估信贷风险客户【500010101】

项目背景 本数据集来自一家德国银行&#xff0c;由加州大学霍夫曼教授于 2016 年收集整理&#xff0c;每条记录代表了一个接受银行信贷的客户&#xff0c;这也就说明了&#xff0c;这些客户都是通过了贷款申请的&#xff0c;通过可视化分析对数据进行初步探索&#xff0c;并利…

动态规划day05(背包问题)

1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度&#xff1a;中等 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < …

蓝桥杯基础知识3 memset()

蓝桥杯基础知识3 memset() #include <bits/stdc.h> using namespace std;int main(){int a[5]; //随机数for(int i 0;i < 5; i)cout << a[i] << \n;cout << \n;memset(a, 0, sizeof a); //0for(int i 0;i < 5; i)cout << a[i] << …

【Java 干货教程】Java实现分页的几种方式详解

一、前言 无论是自我学习中&#xff0c;还是在工作中&#xff0c;固然会遇到与前端搭配实现分页的功能&#xff0c;发现有几种方式&#xff0c;特此记录一下。 二、实现方式 2.1、分页功能直接交给前端实现 这种情况也是有的&#xff0c;(根据业务场景且仅仅只能用于数据量…

多模态大模型Clip

一、经典分类模型的问题: 类别固定当前的模型只能胜任一个任务&#xff0c;迁移到新任务上非常困难类别互斥当前的CV数据集标注劳动密集&#xff0c;成本较高&#xff0c;当前模型泛化能力较差 负样本的组成(Batchsize有N个文本-图像对) Batchsize太小&#xff0c;负样本太少…

Echarts的常用API,以及常用的写法

ECharts是一款基于JavaScript的开源可视化库&#xff0c;用于构建交互式的图表和可视化数据。它提供了丰富的API用于定制图表和处理数据。下面是一些常用的ECharts API和写法的简介&#xff1a; 初始化图表容器&#xff1a; var myChart echarts.init(document.getElementBy…

shp文件与数据库(创建shp文件)

前言 前面把shp文件中的内容读取到数据库&#xff0c;接下来就把数据库中的表变成shp文件。 正文 简单的创建一个shp文件 暂时不读取数据库的表&#xff0c;先随机创建一个shp文件。既然是随机的&#xff0c;这就需要使用到faker这个第三方库&#xff0c;代码如下。 impor…

【控制篇 / 策略】(7.4) ❀ 01. IP地理位置数据库和地理地址对象 ❀ FortiGate 防火墙

【简介】在很多使用环境下&#xff0c;我们需要对指定国家的IP地址进行允许或禁止访问操作&#xff0c;例如只允许访问国内IP。以前只能手动添加IP地址对象到地址组&#xff0c;繁杂且效率低下&#xff0c;Fortinet提供了基于地理位置的IP库&#xff0c;就可以解决这个问题。 I…

UNRAID 优盘制作

使用方法和开心方法&#xff1a; 如果重启之后显示器有信号但是黑屏无法正常引导系统&#xff0c;此为九代以后主板快速开机&#xff08;快速引导&#xff09;UNRAID并不支持快速引导所以会直接卡黑屏。所以发现这种情况的时候请进BIOS关闭和开机快速引导或和快有关系的任何开…

2024 IAA增长变现玩法拆解,NetMarvel提出进阶版攻略!

2023年的国内外市场&#xff0c;很多大甲方都表示消极&#xff0c;字节游戏业务高歌猛进后大撤退更是直接震惊了整个行业&#xff0c;更别说第二第三梯队的服务商了。 动荡和低迷的经济局势还没有消散&#xff0c;这给开发者带来接连不断的挑战。 01 市场反馈是正向的&#x…

海外云手机助力企业拓展海外市场

在当前全球化的商业环境中&#xff0c;由于政策限制&#xff0c;许多企业面临着无法顺利将产品推广到国外的困境&#xff0c;使得海外市场的机遇白白流失。而随着科技的不断创新&#xff0c;一种解决企业海外拓展困境的工具应运而生&#xff0c;那就是海外云手机。本文将深入探…

Java中的多线程

进程和线程的概念 进程是应用程序的执行实例有独立的内存空间和系统资源。 线程是进程中执行运算的最小单位&#xff0c;可完成一个独立的顺序控制流程 一。一个进程可以包含多个线程&#xff0c;每个线程都独立执行特定的任务&#xff0c; 是CPU调度和分派的基本单位。 多线…

JAVA数学区间计算,支持开闭区间、百分比、-∞、+∞

import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import java.math.BigDecimal; import java.math.RoundingMode;/*** 判断数值是否在数学区间范围内** author AnNong* date 2023-04-07*/ public class IntervalUtil {public static ScriptEngine…

前端生成pdf之html2canvas+jsPDF,以及解决图片不显示bug

前端如何生成pdf 开发背景&#xff1a; 需要给页面中相应的内容生成pdf&#xff0c;查找文档后发现要用到两个插件。html2canvas 以及 jsPDF html2canvas 给dom结构转化为canvas&#xff0c;然后生成各种类型图片jsPDF 把canvas 生成的图片url 转化为pdf // 插入图片 pdf.addI…

3.【CPP入门】(深浅拷贝||运算符重载||赋值运算符重载)

一.浅拷贝和深拷贝 1.引入 从上篇博客拷贝构造我们知道拷贝构造要传引用而不能传值&#xff0c;否则会发生无穷递归的情况。 1.若未显示定义拷贝构造函数&#xff0c;系统会生成默认的拷贝构造函数。默认的拷贝构造按内存序完成拷贝&#xff0c;我们称之为浅拷贝&#xff08;…

python中迭代器的应用

迭代器&#xff08;Iterator&#xff09;在Python中是一种用于迭代访问元素的对象&#xff0c;它提供了一种统一的访问集合元素的方式。迭代器通常与可迭代对象&#xff08;Iterable&#xff09;一起使用&#xff0c;如列表、元组、字典等。以下是迭代器在Python中的应用场景&a…

开机自启动app

问&#xff1a;在android系统的tv上&#xff0c;用遥控器可以控制光标位置&#xff0c;这是不是有一些监听事件实现的&#xff0c;具体原理是什么 答&#xff1a; 在 Android TV 上&#xff0c;使用遥控器来控制光标位置的功能是通过处理按键事件和焦点控制来实现的。 Andro…