某info <= 6.2.0前台任意文件上传漏洞
字数 1032 2025-08-27 12:33:31
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)可导致路径截断
关键代码流程
-
上传流程:
doupfile() -> set_upfile() // 设置默认savepath为/website_root/upload/file/ -> set_upload() // 用用户数据重设savepath -> upload() -
上传验证流程:
- 检查文件后缀(黑白名单)
- 处理文件名非法字符
- 检查
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
-
复现流程:
1. 登录后台寻找上传点 2. 拦截上传请求 3. 构造包含特殊字符的文件名 4. 利用路径穿越控制最终存储位置 5. 上传webshell文件
修复建议
- 升级到最新版本Metinfo
- 对上传路径进行严格校验
- 禁用危险字符在文件名中的使用
- 升级PHP版本至5.3以上
- 对上传文件进行重命名处理
参考资源
- 原始漏洞报告: Metinfo6 Arbitrary File Upload Via Iconv Truncate
- 相关技术: PHP iconv函数截断漏洞
- 受影响版本完整列表
附录
关键Payload示例
a.php%80\..\webshell.php
漏洞利用条件检查清单
- Windows环境 ✅
- PHP <=5.3 ✅
- Metinfo <=6.2.0 ✅
- 前台上传权限 ✅
- 可控制上传路径参数 ✅