文件包含漏洞的定义
文件包含漏洞是一种常见的Web安全漏洞,允许攻击者通过动态包含文件的功能,将恶意文件注入到服务器端执行。通常发生在应用程序使用用户可控的输入(如参数或路径)来动态包含文件时,未对输入进行严格过滤或验证。漏洞分为本地文件包含(LFI)和远程文件包含(RFI)两种类型。
文件包含漏洞的利用
伪协议
php://filter,php://filter 是 PHP 中一种特殊的流过滤器伪协议,主要用于在数据流传递过程中应用过滤器(如编码、解码或转换)。它不直接访问文件系统,而是对现有数据流进行处理,常用于文件读写时的动态内容转换。过滤器链可以使用不同的编码转换,通常被用来读取文件:
php
php://filter/[过滤器链]/resource=[目标资源]
Base64 编码读取文件示例:
php://filter/convert.base64-encode/resource=filename
靶场、实战练习
Bugku NUAACTF 2020 command-injection-CSDN博客
文件包含漏洞防御
验证
严格过滤用户输入,禁止包含路径中出现../等目录遍历字符。使用白名单机制,限制可包含的文件范围。
策略
关闭不必要的PHP配置选项,如allow_url_include和allow_url_fopen,防止远程文件包含。
将用户输入与文件路径拼接时,使用绝对路径而非相对路径,避免目录遍历。
对包含的文件名进行硬编码或映射,避免直接使用用户输入。例如,通过预定义的文件列表选择包含内容。