MetaCRM7-代码审计
字数 2036
更新时间 2025-09-23 19:27:46

MetaCRM7 综合管理系统代码审计教学文档

1. 系统概述

MetaCRM7 综合管理系统是基于 Java 开发的客户关系管理系统,采用 MSSQL 数据库,存在多处安全漏洞。

2. 环境信息

  • 数据库: MSSQL
  • 中间件: Tomcat
  • 技术栈: Java + Servlet + JSP
  • 第三方组件:
    • Druid 数据库连接池 (1.0.0+)
    • dom4j (1.6.1.jar,存在 XXE 漏洞)

3. 漏洞详情

3.1 Druid 默认凭据漏洞

位置: WEB-INF/web.xml

<servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    <init-param>
        <param-name>loginUsername</param-name>
        <param-value>druid</param-value>
    </init-param>
    <init-param>
        <param-name>loginPassword</param-name>
        <param-value>MetasoftDruid2021+-</param-value>
    </init-param>
</servlet>

风险:

  • 默认用户名: druid
  • 默认密码: MetasoftDruid2021+-
  • 访问路径: /druid/*

利用方式:

  1. 访问 http://target/druid/login.html
  2. 使用默认凭据登录
  3. 可通过 Session 监控获取登录凭证

3.2 前台 SQL 注入漏洞

位置: /headimgsave 接口

代码分析:

  • 调用 ImgController Servlet
  • 参数 accountid 直接拼接 SQL 语句
  • 使用 com.metasoft.wxsconf.wxdb.accountdb.AccountPO#getAc 方法执行查询
  • 异常信息会通过 out.print 输出

利用方式:

POST /headimgsave HTTP/1.1
Host: target
Content-Length: 30
Content-Type: application/x-www-form-urlencoded

accountid=1' and+1=@@VERSION--

: 利用 MSSQL 的报错信息泄露功能,可通过 @@VERSION 获取数据库版本信息。

3.3 文件读取漏洞

3.3.1 /business/common/toviewspecial.jsp

漏洞点:

<jsp:include page="<%=view%>"/>

限制: 只能包含 Tomcat 目录下的文件,无法路径穿越到系统根目录。

3.3.2 /business/common/download-new.jsp

限制: 功能鸡肋,读取范围有限。

3.4 XXE 漏洞

位置: /services/ws WebService 接口

技术细节:

  • 使用 com.metasoft.ws.service.data.CommonOperationServImpl 处理请求
  • 调用 DocumentUtil.getDocument4String 解析 XML
  • dom4j 1.6.1 版本存在 XXE 漏洞
  • 多个方法均受影响

验证方式: 通过 DNSLog 确认漏洞存在

3.5 后台任意文件读取漏洞

位置: /business/common/download.jsp

漏洞机理:

  1. 参数 p 传递给 downUrl
  2. 调用 new AnalyzeParam(downUrl) 解密参数
  3. 使用 AES-ECB 加密,密钥: metacrmloginpass
  4. 参数格式为 JSON
  5. 最终调用 UserService.downloadFile 下载文件

利用条件: 需要后台权限

PoC 生成: 使用 CyberChef 等工具进行 AES 加密生成有效参数

3.6 后台任意文件上传漏洞

位置: /develop/systparam/softlogo/upload.jsp

安全机制:

  • com.metasoft.framework.pub.upload.Upload 添加了黑名单
  • 黑名单配置: configs/limit.json
  • com.metasoft.framework.pub.file.FileUtil 同样有黑名单限制

绕过方式: 通过全局搜索发现其他未受保护的上传点

利用条件: 需要后台权限

4. 修复建议

4.1 Druid 连接池

  • 修改默认用户名和密码
  • 限制访问 IP 范围
  • 升级到最新版本

4.2 SQL 注入

  • 使用预编译语句 (PreparedStatement)
  • 实施参数化查询
  • 对输入进行严格的过滤和验证

4.3 文件操作

  • 限制文件读取范围
  • 禁用动态文件包含
  • 实施路径白名单机制

4.4 XXE 漏洞

  • 升级 dom4j 到最新版本
  • 禁用外部实体解析:
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
    dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
    

4.5 文件上传

  • 实施严格的文件类型验证
  • 使用文件内容检测而非扩展名检测
  • 将上传文件存储在非 Web 根目录
  • 对上传文件进行病毒扫描

4.6 加密安全

  • 使用强加密算法 (如 AES-256)
  • 安全管理加密密钥
  • 避免使用硬编码密钥

5. 审计方法总结

  1. 配置文件检查: 检查 web.xml 等配置文件中的安全设置
  2. 第三方组件分析: 识别已知漏洞的组件版本
  3. 输入点追踪: 追踪用户输入的数据流
  4. 权限验证: 检查每个功能的权限控制机制
  5. 加密机制: 分析自定义加密实现的安全性

6. 参考资源

  • OWASP Top 10 安全风险
  • MSSQL 注入手册
  • Java 安全编码规范
  • 常见 Web 漏洞利用技术

: 本教学文档仅用于安全研究和教育目的,请勿用于非法用途。在实际测试中,务必获得系统所有者的明确授权。

相似文章
相似文章
 全屏