开发安全之Dangerous File Inclusion

Overview

将一个未验证的文件名传递给了 include 指令。如果允许未验证的用户输入控制动态包含在 PHP 中的文件,会导致恶意代码的执行。

Details

许多现代网络编写语言都能够在一个封装的文件内包含附加的源文件,从而使代码可以重用和模块化。这种能力经常用于赋予应用程序标准外观(应用模板),因而,人们可以共享各种功能而不需要借助编译的代码,或将代码分解成较小的更好管理的文件。各个包含文件都会作为主文件的一部分进行解析,并采用相同的方式来执行。当未验证的用户输入控制了所包含文件的路径时,就会发生 File inclusion 漏洞。 File inclusion 漏洞是各种 PHP 应用程序中最多见且最为严重的漏洞。在低于 PHP 4.2.0 的版本中,PHP 的安装包附带了默认启用的 register_globals,从而使攻击者很容易重写内部服务器的各种变量。尽管禁用 register_globals 可以从一定程度上减少程序发生 file inclusion 漏洞的风险,但是这些问题仍然存在于各种现代的 PHP 应用程序中。

**例 1:**以下代码包含了一个文件,该文件位于模板中定义 $server_root 的应用程序下。 ...

<?php include($server_root . '/myapp_header.php'); ?>

... 如果将 register_globals 设置为 on,攻击者可以通过提供 server_root 请求参数覆盖 server_root 值,从而部分控制动态 include 指令。

**例 2:**以下代码采用了用户指定的模板名称,并将该名称包含在要呈现的 PHP 页面中。

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

... 在Example 2 中,攻击者可通过为 headername 提供恶意值来完全控制动态 include 语句,从而会使程序包含来自外部站点的文件。 如果攻击者给动态 include 指令指定有效文件,该文件的内容将被传送到 PHP 解释器。对于一个纯文本文件来说,如 /etc/shadow,该文件可能会作为 HTML 输出的一部分来呈现。更为糟糕的是,如果攻击者可以指定一条路径来指向被自己控制的远程站点,那么动态 include 指令就会执行由攻击者提供的任意恶意代码。

Recommendations

通过将以下行包含在 php.ini 文件中来禁用 register_globals 选项: register_globals = 'off' 不要允许未验证的用户输入控制动态包含指令中使用的路径。而应当采取一种间接手段:创建一份合法包含文件列表,仅允许用户从该列表中进行选择。利用这种方法,用户就不能直接从文件系统中指定一个文件。 例 2 可以进一步改进,将用户输入映射至用来选择所需模板的按键,如下所示:

php 复制代码
<?php 
$templates = array('main.php' => 1, 'blue.php' => 2, 'red.php' => 3);?>

<?php include($templates[$_GET['headername']]); ?>
相关推荐
Hello.Reader3 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
智驱力人工智能4 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
数据与后端架构提升之路4 小时前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全
市场部需要一个软件开发岗位6 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
lingggggaaaa6 小时前
安全工具篇&动态绕过&DumpLsass凭据&Certutil下载&变异替换&打乱源头特征
学习·安全·web安全·免杀对抗
凯子坚持 c6 小时前
CANN-LLM:基于昇腾 CANN 的高性能、全功能 LLM 推理引擎
人工智能·安全
QT.qtqtqtqtqt7 小时前
未授权访问漏洞
网络·安全·web安全
ba_pi10 小时前
每天写点什么2026-02-04(2.1)信息安全
安全·web安全
枷锁—sha10 小时前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
菩提小狗11 小时前
小迪安全2023-2024|第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载_笔记|web安全|渗透测试|
笔记·安全·web安全