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/*
利用方式:
- 访问
http://target/druid/login.html - 使用默认凭据登录
- 可通过 Session 监控获取登录凭证
3.2 前台 SQL 注入漏洞
位置: /headimgsave 接口
代码分析:
- 调用
ImgControllerServlet - 参数
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
漏洞机理:
- 参数
p传递给downUrl - 调用
new AnalyzeParam(downUrl)解密参数 - 使用 AES-ECB 加密,密钥:
metacrmloginpass - 参数格式为 JSON
- 最终调用
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. 审计方法总结
- 配置文件检查: 检查 web.xml 等配置文件中的安全设置
- 第三方组件分析: 识别已知漏洞的组件版本
- 输入点追踪: 追踪用户输入的数据流
- 权限验证: 检查每个功能的权限控制机制
- 加密机制: 分析自定义加密实现的安全性
6. 参考资源
- OWASP Top 10 安全风险
- MSSQL 注入手册
- Java 安全编码规范
- 常见 Web 漏洞利用技术
注: 本教学文档仅用于安全研究和教育目的,请勿用于非法用途。在实际测试中,务必获得系统所有者的明确授权。