某info <= 6.2.0前台任意文件上传漏洞
字数 1032 2025-08-27 12:33:31

Metinfo <=6.2.0 前台任意文件上传漏洞分析报告

漏洞概述

  • 漏洞类型: 前台任意文件上传漏洞
  • 影响版本: Metinfo <=6.2.0
  • 受影响环境: Windows环境 + PHP版本<=5.3
  • 危害等级: 高危,攻击者可直接获取网站权限
  • 漏洞根源: iconv函数字符转换截断问题 + 路径控制不当

漏洞分析

核心问题点

  1. 上传类设计缺陷:

    • doupfile方法中$info变量来自用户可控数据$_M['form']
    • savepath属性先后被set_upfileset_upload方法设置,后者使用用户可控数据
  2. 路径控制问题:

    • savepath属性影响上传文件存储位置
    • 程序检查savepath是否以/webroot/upload/开头且不包含./
    • Windows下可使用..\绕过./过滤
  3. iconv函数截断漏洞:

    • 低版本PHP中iconv函数存在字符转换截断问题
    • 使用特殊字符(%80)可导致路径截断

关键代码流程

  1. 上传流程:

    doupfile()
    -> set_upfile() // 设置默认savepath为/website_root/upload/file/
    -> set_upload() // 用用户数据重设savepath
    -> upload()
    
  2. 上传验证流程:

    • 检查文件后缀(黑白名单)
    • 处理文件名非法字符
    • 检查is_rename变量(用户可控)
    • 拼接savepathsavename形成最终路径
    • Windows环境下调用iconv进行编码转换

绕过技术细节

  1. 路径截断:

    • 使用%80字符使iconv发生截断
    • 构造形如a.php%80\..\1.jpg的payload
  2. 绕过限制:

    • 未定义IN_ADMIN时,\会被sqlinsert函数替换为/
    • 通过admin/index.php定义IN_ADMIN可绕过此限制

漏洞复现步骤

  1. 环境准备:

    • Windows系统
    • PHP <=5.3
    • Metinfo <=6.2.0
  2. 复现流程:

    1. 登录后台寻找上传点
    2. 拦截上传请求
    3. 构造包含特殊字符的文件名
    4. 利用路径穿越控制最终存储位置
    5. 上传webshell文件
    

修复建议

  1. 升级到最新版本Metinfo
  2. 对上传路径进行严格校验
  3. 禁用危险字符在文件名中的使用
  4. 升级PHP版本至5.3以上
  5. 对上传文件进行重命名处理

参考资源

  • 原始漏洞报告: Metinfo6 Arbitrary File Upload Via Iconv Truncate
  • 相关技术: PHP iconv函数截断漏洞
  • 受影响版本完整列表

附录

关键Payload示例

a.php%80\..\webshell.php

漏洞利用条件检查清单

  1. Windows环境 ✅
  2. PHP <=5.3 ✅
  3. Metinfo <=6.2.0 ✅
  4. 前台上传权限 ✅
  5. 可控制上传路径参数 ✅
Metinfo <=6.2.0 前台任意文件上传漏洞分析报告 漏洞概述 漏洞类型 : 前台任意文件上传漏洞 影响版本 : Metinfo <=6.2.0 受影响环境 : Windows环境 + PHP版本 <=5.3 危害等级 : 高危,攻击者可直接获取网站权限 漏洞根源 : iconv函数字符转换截断问题 + 路径控制不当 漏洞分析 核心问题点 上传类设计缺陷 : doupfile 方法中 $info 变量来自用户可控数据 $_M['form'] savepath 属性先后被 set_upfile 和 set_upload 方法设置,后者使用用户可控数据 路径控制问题 : savepath 属性影响上传文件存储位置 程序检查 savepath 是否以 /webroot/upload/ 开头且不包含 ./ Windows下可使用 ..\ 绕过 ./ 过滤 iconv函数截断漏洞 : 低版本PHP中iconv函数存在字符转换截断问题 使用特殊字符(%80)可导致路径截断 关键代码流程 上传流程: 上传验证流程: 检查文件后缀(黑白名单) 处理文件名非法字符 检查 is_rename 变量(用户可控) 拼接 savepath 和 savename 形成最终路径 Windows环境下调用iconv进行编码转换 绕过技术细节 路径截断 : 使用 %80 字符使iconv发生截断 构造形如 a.php%80\..\1.jpg 的payload 绕过限制 : 未定义 IN_ADMIN 时, \ 会被 sqlinsert 函数替换为 / 通过 admin/index.php 定义 IN_ADMIN 可绕过此限制 漏洞复现步骤 环境准备 : Windows系统 PHP <=5.3 Metinfo <=6.2.0 复现流程 : 修复建议 升级到最新版本Metinfo 对上传路径进行严格校验 禁用危险字符在文件名中的使用 升级PHP版本至5.3以上 对上传文件进行重命名处理 参考资源 原始漏洞报告: Metinfo6 Arbitrary File Upload Via Iconv Truncate 相关技术: PHP iconv函数截断漏洞 受影响版本完整列表 附录 关键Payload示例 漏洞利用条件检查清单 Windows环境 ✅ PHP <=5.3 ✅ Metinfo <=6.2.0 ✅ 前台上传权限 ✅ 可控制上传路径参数 ✅