本地文件包含漏洞详解

本地文件包含漏洞(LFI)允许攻击者通过控制输入来读取服务器上的文件,可能导致敏感信息泄露或代码执行。涉及的 PHP 危险函数有 include、require 等。常见产生场景包括动态文件包含。防御措施包括避免动态包含、限制包含目录、使用白名单等。

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

0x00:漏洞定义

在通过服务器脚本的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露、恶意代码的注入等。

文件包含分为两种,一种为本地文件包含,一种为远程文件包含,此篇记录本地文件包含。本地文件包含(Local File Include),简称 LFI。

0x01:涉及函数

文件包含在 php 中,涉及到的危险函数有四个,分别是 include()、include_once()、require()、require_once()。

区别如下:

include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。
include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次。

require:包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。
require_once:和 require 类似,不同处在于 require_once 只导入一次。

0x02:产生场景

开发过程中,多个文件都会用到的代码,通常会放到一个单独的文件中,用到时再包含进来。当把包含的文件写死在程序中时,该漏洞是不存在的,但很多情况都会动态的去包含所需的文件,这时候则会产生文件包含漏洞。

0x03:简单示例

以下代码是最简单的一个文件包含示例,程

### 文件包含漏洞(File Inclusion Vulnerability)详细介绍 文件包含漏洞是指当Web应用允许用户通过参数指定要加载的文件路径或名称时,未能对此输入进行适当验证和过滤的情况。这使得攻击者能够操纵这些参数来访问任意文件或者执行恶意脚本[^3]。 #### 漏洞特征 - 应用程序接受来自用户的输入作为文件路径的一部分; - 输入未经过严格的校验就被用于打开本地或其他位置上的文件; - 攻击者可以控制部分甚至全部文件路径字符串; #### 利用条件 为了成功利用此类漏洞,通常需要满足以下几个前提: - 存在一个可由外部影响并最终决定所载入资源URL/PATH的地方; - 缺乏有效的白名单机制去限定哪些文件是可以合法请求的对象; - 对特殊字符缺乏转义处理从而可能绕过简单的黑名单防护措施; #### 危害分析 一旦被利用,文件包含漏洞可能导致严重的后果,包括但不限于: - **远程代码执行**:如果服务器端支持解析动态页面,则攻击者可能会上传特制文件并通过此漏洞使目标机器运行其中的内容。 - **敏感数据暴露**:如配置文件、源码等内部资料也可能因为错误设置而遭到窃取[^4]。 - **横向移动**:借助已有的权限读取其他系统的机密文档或是进一步扩大战果至整个网络环境之内。 --- ### 防御策略建议 针对上述风险点采取如下预防手段是非常必要的: 1. **严格限制文件来源** - 使用绝对路径而非相对路径引用所需资源; - 实施基于角色的安全模型以最小化不必要的功能开放程度; 2. **强化输入验证逻辑** - 建立健全的正则表达式匹配规则确保只接收预期范围内的值; - 运用框架自带的安全组件辅助完成更复杂的判断工作; 3. **采用间接引用方式** - 将实际物理地址映射成唯一标识符供前端调用而不是直接展示给用户; - 在服务层做一层转换再传递到底层实现具体操作; 4. **定期审查现有架构设计合理性** - 关注官方发布的CVE列表及时更新依赖库版本号; - 组织内部培训提高全员对于潜在威胁的认识水平; ```php // 安全的做法是使用预定义好的选项代替自由形式的输入 $files = array( 'home' => '/var/www/html/index.php', 'about' => '/var/www/html/about.php' ); $file = isset($_GET['page']) ? $_GET['page'] : 'home'; include($files[$file]); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值