JAVA代码审计-某依系统
字数 2257 2025-08-06 12:20:51
某依系统Java代码审计与漏洞分析报告
环境搭建
- 使用IntelliJ IDEA进行环境搭建
- 导入数据库后启动环境
- 项目采用Maven多模块构建方式
第三方组件漏洞审计
1. Shiro反序列化漏洞(v4.2)
漏洞位置:
RuoYi-v4.2\ruoyi-framework\src\main\java\com\ruoyi\framework\config\ShiroConfig.java
关键点:
- 第231-276行配置了资源访问拦截器
- 第272行使用
/**表达式进行路径拦截 - 密钥硬编码在代码中(通过搜索
setCipherKey可发现)
Shiro URL路径表达式组成:
- 资源定位符(Resource Locator)
- 访问控制指令(Action/Permission)
- 过滤器链(Filter Chain)
Ant风格路径表达式示例:
/admin/**- 匹配所有以/admin/开头的URL/user/create- 匹配具体URL路径/login.jsp- 匹配具体JSP路径
漏洞复现:
- 发现cookie含有rememberme字段
- 使用脚本或自动化工具构造恶意payload
- 经过序列化、AES加密、base64编码后作为rememberMe字段发送
- Shiro解密并反序列化导致RCE
2. Fastjson反序列化漏洞
审计流程:
- 全局搜索
parseObject - 追踪
VelocityUtils.java中的JSONObject.parseObject(options) options来自genTable.getOptions()- 跟进
setTreeVelocityContext和prepareContext - 发现
GenConstants.TPL_TREE常量值为"tree" tplCategory字段有两个值:"crud"和"tree"
调用链:
GenTaleServiceImpl.java → VelocityUtils.prepareContext(table) → genTableMapper.selectGenTableById(tableId)
漏洞触发点:
- 路径:
/tool/gen/preview - 可控参数:
tableId
3. SnakeYaml组件漏洞
漏洞信息:
- 漏洞编号:CVE-2022-1471
- 类型:缓冲区错误导致DoS
- 官方认为使用场景应仅接收可信数据源,未修复
审计方法:
- 全局搜索
Yaml.load( - 本项目未使用该组件
4. Thymeleaf组件漏洞(v4.7.1)
漏洞信息:
- 版本:2.0.0
- 漏洞类型:SSTI(模板注入)
- 路径遍历漏洞可读取任意文件
审计关注点:
- URL路径可控
- return内容可控
漏洞示例代码:
@GetMapping("/view")
@ResponseBody
public String view(@RequestParam(value="name", required=false, defaultValue="../../file.txt") String name) throws IOException {
// 文件读取逻辑
}
修复建议:
- 使用Thymeleaf内置安全功能
- 使用Spring Security的SpEL处理请求参数
- 限制可访问文件夹
v4.7.1漏洞点:
- 文件:
CacheController.java - 路径:
/monitor/cache - 接口:
/getNames,/getKeys,/getValue - 方法:POST
- 参数:
fragment
Payload示例:
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("whoami").getInputStream()).next()}__::.x
__${T(java.lang.Runtime).getRuntime().exec("touch test")}__::.x
复现步骤:
- 访问系统监控 → 缓存监控
- 点击"刷新"按钮捕获请求
- 在
fragment参数中构造payload - URL编码后发送
Web漏洞审计
1. SQL注入漏洞
审计方法:
- 全局搜索
$限定文件类型为.xml - 发现
sysDeptMapper.xml和sysUserMapper.xml存在风险
调用链:
sysRoleMapper.xml → SysRoleMapper.java → SysRoleServiceImpl.java → ISysRoleService.java → SysRoleController.java
漏洞复现:
- 访问角色管理功能
- 使用搜索功能捕获
/system/role/list请求 - 使用sqlmap验证
2. 定时任务功能命令执行漏洞
模块位置:
ruoyi-quartz模块- 使用quartz框架
关键代码:
SysJobController.java中的run方法- 最终实现:
SysJobServiceImpl.java第180-188行 JobInvokeUtil.invokeMethod(sysJob)
执行方式:
- Bean调用
- Class类调用
漏洞复现:
- 添加定时任务
- 输入恶意payload
- 执行任务观察DNSlog回显
3. 任意文件读取/下载漏洞
漏洞位置:
CommonController.java第96-111行- 方法:
resourceDownload
关键点:
- 使用
FileUtils.writeBytes()输出文件 downloadPath由localPath和资源路径组成localPath来自application.yml配置文件
漏洞接口:
- 路径:
/common/download/resource - 方法:GET
- 参数:
resource
Payload示例:
http://127.0.0.1/common/download/resource?resource=/profile/etc/passwd