代码审计-jshERP-3.5
字数 2177 2025-09-01 11:25:54
jshERP v3.5 代码审计与漏洞分析教学文档
目录
- 环境搭建
- 项目架构分析
- 漏洞审计方法论
- 详细漏洞分析
- 登录绕过漏洞
- 水平越权漏洞
- 文件上传漏洞
- Swagger API未授权访问
- 修复建议
- 总结
1. 环境搭建
1.1 准备工作
- 项目源码:GitHub Release 管伊佳ERP_v3.5
- 数据库:MySQL
- 缓存:Redis
- 前端:Node.js环境
1.2 后端配置
- 修改
application.properties中的MySQL和Redis配置 - 导入SQL文件初始化数据库
- 启动Spring Boot应用
1.3 前端配置
- 安装Node.js环境
- 解决依赖冲突:
- 在
package.json中添加resolutions字段强制指定webpack版本 - 降低
css-loader和style-loader版本以兼容Webpack 4
- 在
- 运行
npm run serve启动前端
2. 项目架构分析
2.1 技术栈
- 后端:Spring Boot + MyBatis
- 前端:Vue.js
- 数据库:MySQL
- 缓存:Redis
- JSON处理:FastJSON 1.2.83(存在已知漏洞)
2.2 关键组件
- TenantConfig:租户隔离配置
- Filter:登录验证过滤器
- Swagger2Config:API文档配置
3. 漏洞审计方法论
3.1 审计流程
- 分析
pom.xml识别依赖风险 - 审查过滤器(Filter)和拦截器(Interceptor)
- 检查租户隔离实现
- 测试关键功能点(用户管理、角色管理等)
- 检查文件上传功能
- 验证API文档安全性
3.2 重点关注点
- MyBatis SQL注入风险(
${}使用) - FastJSON反序列化漏洞
- 权限校验缺失
- 租户隔离绕过
- 文件上传限制
4. 详细漏洞分析
4.1 登录绕过漏洞
漏洞位置
Filter中的doFilter方法
漏洞原理
- 过滤器检查请求路径是否包含
allowUrls中的路径 - 使用
contains方法而非精确匹配 - 可通过路径遍历绕过:
/jshERP-boot/user/login/../../xx
复现步骤
- 构造包含允许路径的URL
- 发送未授权请求
影响
- 绕过登录验证
- 访问受限功能
4.2 水平越权漏洞
4.2.1 租户隔离绕过
漏洞位置
TenantConfig租户配置
漏洞原理
- 系统从
X-Access-Token头获取租户ID - 修改或删除该头部可绕过租户隔离
- 配合登录绕过实现完全越权
复现步骤
- 删除
X-Access-Token头 - 使用路径遍历绕过登录
- 发送修改其他租户数据的请求
4.2.2 具体越权点
用户管理
UserController.resetPwd:重置任意用户密码UserController.updateByPrimaryKeySelective:修改用户信息
供应商管理
SupplierController.batchSetStatus:修改任意供应商状态
资源管理
ResourceController.updateResource:修改资源并转移租户ResourceController.delete:删除任意资源
角色管理
RoleController.allList:获取所有角色信息RoleController.batchSetStatus:修改任意角色状态
其他
PersonController.getAllList:获取所有经手人信息AccountController.getAccount:未授权访问账户信息
影响
- 查看、修改、删除其他租户数据
- 系统数据泄露
- 权限提升
4.3 文件上传漏洞
漏洞位置
SystemConfigController.upload方法
限制条件
biz参数必须为bill、financial或material- 默认存储到本地(
fileUploadType=1) - 后缀限制:仅允许特定类型(包括PDF)
潜在风险
- 存储型XSS(通过PDF)
- 若解压功能存在,可能造成ZIP解压漏洞
4.4 Swagger API未授权访问
漏洞位置
Swagger2Config配置类
漏洞原理
- 未配置访问控制
- 未添加身份验证
影响
- 暴露所有API接口
- 辅助攻击者发现更多漏洞
5. 修复建议
5.1 登录绕过
- 使用精确路径匹配而非
contains - 规范化请求路径后再验证
5.2 水平越权
- 租户隔离增强:
- 强制要求
X-Access-Token - 添加默认租户限制
- 强制要求
- 关键操作添加权限验证:
- 操作前验证用户权限
- 记录操作日志
5.3 文件上传
- 限制PDF文件中的JavaScript执行
- 添加内容类型检查
5.4 Swagger API
- 添加访问控制
- 限制内网访问
- 或生产环境禁用
6. 总结
jshERP v3.5存在多处严重漏洞,主要问题集中在:
- 权限验证不严格
- 租户隔离可绕过
- 敏感接口暴露
审计此类系统时应重点关注:
- 多租户系统的隔离机制
- 权限验证的完整性
- 敏感操作的日志记录
- 第三方组件的安全性
通过本案例,我们可以学习到企业级应用中常见的权限设计缺陷及其利用方式,为开发安全的系统提供参考。