某开源ERP最新版SQL与RCE的审计过程
字数 1381 2025-08-10 00:24:01
华夏ERP v2.3.1安全漏洞审计报告
一、系统概述
目标系统:华夏ERP (JSH_ERP) v2.3.1
源码地址:https://gitee.com/jishenghua/JSH_ERP
审计重点:认证绕过、SQL注入、远程代码执行(RCE)
二、认证绕过漏洞分析
漏洞位置
LogCostFilter过滤器类,负责系统访问控制
漏洞原理
-
认证检查机制:
- 通过检查session中的
user属性判断用户是否登录 - 对特定路径(
/doc.html,/register.html,/login.html)直接放行
- 通过检查session中的
-
漏洞成因:
- 使用
contains()方法进行路径匹配而非精确匹配 - 攻击者可构造包含
login.html的路径绕过认证
- 使用
漏洞复现
请求示例:
GET /depotHead/login.html/../list?search=aaa¤tPage=1&pageSize=10&t=1618229175662 HTTP/1.1
Host: 192.168.245.1:9978
修复建议
- 使用精确路径匹配而非
contains() - 实现严格的路径规范化处理
三、SQL注入漏洞分析
漏洞位置
depotHead/list接口的getDepotHeadList方法
漏洞原理
-
注入点:
search参数中的subType字段- 通过MyBatis的
$符号直接拼接SQL
-
MyBatis配置:
<!-- 漏洞代码示例 --> <select id="selectByConditionDepotHead" resultMap="BaseResultMap"> SELECT ... WHERE dh.sub_type = ${subType} </select>
漏洞复现
Payload示例:
{
"type":"其它",
"subType":"采购订单' or ''='",
"roleType":"全部数据",
"materialParam":"22222222222222"
}
最终执行的SQL:
SELECT ... WHERE dh.type = '其它' AND dh.sub_type = '采购订单' OR '' = '' ...
修复建议
- 使用MyBatis的
#预编译参数 - 对用户输入进行严格过滤和转义
四、远程代码执行(RCE)漏洞分析
漏洞位置
/uploadInstallPluginJar接口
漏洞原理
-
功能设计:
- 允许上传并动态加载插件JAR文件
- 插件框架:springboot-plugin-framework
-
攻击方式:
- 构造恶意插件JAR
- 在
DefinPlugin类中植入恶意代码 - 通过上传接口安装插件
漏洞复现步骤
- 创建恶意插件项目
- 修改MANIFEST.MF添加必要字段
- 打包为JAR文件
- 通过接口上传:
POST /uploadInstallPluginJar Content-Type: multipart/form-data
限制条件
- 需要
plugins目录存在(需手动创建或已有插件)
修复建议
- 移除生产环境中的插件安装功能
- 实现严格的插件签名验证机制
- 限制插件上传权限
五、审计方法论总结
-
入口点定位:
- 检查Filter配置(
@WebFilter) - 分析Controller映射(
@RequestMapping)
- 检查Filter配置(
-
数据流跟踪:
- 从用户输入到SQL执行
- 从文件上传到代码执行
-
关键检查点:
- 认证检查逻辑
- SQL拼接方式(
$vs#) - 文件上传处理流程
-
辅助工具:
- MyBatis日志配置:
logging.level.com.jsh.erp.datasource.mappers.*=debug - IDE插件:MyBatisCodeHelper-Pro
- MyBatis日志配置:
六、完整修复方案
-
认证层:
- 实现严格的路径规范化
- 使用白名单而非contains检查
-
SQL注入防护:
- 全面替换
$为# - 实现输入参数过滤
- 全面替换
-
RCE防护:
- 禁用生产环境插件上传
- 实现管理员二次确认机制
- 添加文件签名验证
-
其他建议:
- 定期安全审计
- 建立安全开发规范
- 引入安全测试流程
附录:参考链接
- 源码仓库:https://gitee.com/jishenghua/JSH_ERP
- 插件框架:https://gitee.com/starblues/springboot-plugin-framework-parent
- MyBatis安全:https://mybatis.org/mybatis-3/