File Inclusion(文件包含)

本文详细介绍了PHP的文件包含漏洞,包括本地文件包含和远程文件包含的概念,涉及的函数如include(), require()等。通过实例展示了如何利用此漏洞读取敏感文件,以及在DVWA中进行的低、中、高三个难度级别的练习。同时讨论了如何通过文件协议绕过限制,并强调了开发者应对文件包含漏洞的防范意识。" 126104190,10912945,R语言ggplot2与ggpubr:误差线图与点阵图结合,"['R语言', '数据可视化', 'ggplot2', 'ggpubr']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

File Inclusion

前言

我觉得还是先介绍下,因为涉及到php函数,自己不会 世界最好的语言 ,所以引用他人的优秀的博客来装饰下我这简陋的博客

文件包含漏洞:即File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到自己的目的。

文件包含分为两类:

本地文件包含 当被包含的文件在服务器本地时,就形成本地文件包含;

远程文件包含 当被包含的文件在第三方服务器时,叫做远程文件包含

该漏洞涉及到php常见包含文件函数包括:

include()

当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行

include_once()

功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次

require()

require()与include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行 。使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到函数时才调用 .require()在php程序执行前执行,会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。

require_once()

它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次

白帽子挖洞—文件包含(File Inclusion )

我来说下我对上面的理解吧,php后端,要想执行文件包含这骚操作,allow_url_include必须开启,然后利用上面提到的4个函数,这些函数对文件不会检测(检测也不该由这些函数来做),所以我们能将我们想要用的文件名交给它解析就很好了,来获取我们需要的信息(感觉和溢出有点像啊,也是一些东西没做检测,然后攻击者通过构造payload来让目标执行指定的文件从而实现攻击)。
然后远程执行就是allow_url_fopen也必须开启,我们指定文件就不止限制于目标机的目录,还可以让它去指定服务器去读文件了。
还有一点这个文件包含不是指一个URL像什么.html,.php什么的,这里的URL是要包含一个文件路径,这个文件路径是php后台程序会去调用的。也就是说php后台程序

### 文件上传与文件包含漏洞利用及防御 在处理像Pikachu靶场中的文件上传和文件包含漏洞时,理解这些漏洞的工作原理及其潜在风险至关重要。当应用程序允许用户上传文件并随后尝试动态加载或解析这些文件作为代码的一部分时,就会发生此类漏洞。 #### 漏洞利用实例 假设存在一个PHP应用,其中有一个用于展示不同页面布局的功能,此功能接受来自用户的输入来决定要显示哪个模板文件: ```php <?php // 不安全的做法 $filename = $_GET['page']; include($filename . '.php'); ?> ``` 如果`$_GET['page']`未经过适当验证就被直接使用于`include()`语句中,则攻击者可以通过精心构造请求参数注入恶意路径或URL,进而触发本地或远程文件包含攻击[^1]。 对于文件上传结合文件包含的情况,通常涉及两个主要方面: - 用户提交带有特定扩展名(如`.php`)的文件到服务器; - 应用程序未能正确区分正常图片或其他类型的文件与可执行脚本之间的差异,并错误地将其视为合法资源进行处理。 例如,在某些情况下,即使上传的是图像文件,但如果其实际内容为PHP代码片段,一旦被不当包含,就能被执行。 #### 安全防护建议 为了防止上述提到的安全隐患,应当采取以下措施加强保护机制: - **严格校验文件类型**:不仅依赖MIME类型判断,还应基于文件头信息进一步确认文件的真实性质。 - **限定存储位置**:确保所有上传的数据都被保存在一个独立且受控的位置之外,远离Web根目录,避免意外访问。 - **禁用危险设置**:修改`php.ini`配置项,关闭不必要的选项,比如`allow_url_fopen=Off` 和 `allow_url_include=Off` ,阻止从外部源获取数据的可能性[^2]。 - **实施白名单策略**:只允许预定义列表内的文件名称或模式参与动态加载过程;拒绝一切不在范围之内的请求。 - **启用魔术引号GPC (Magic Quotes GPC)** :虽然现代版本已弃用了这一特性,但在较旧环境中开启它可以自动转义特殊字符,减少SQL注入和其他形式的字符串插值攻击的风险。 综上所述,针对Pikachu靶场所模拟的实际应用场景,开发者应该始终遵循最小权限原则设计API接口逻辑,同时配合有效的输入输出净化手段以及合理的架构规划共同构建起坚固防线抵御各类网络威胁。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值