Java代码审计丨某开源系统源码审计
字数 1325 2025-08-18 11:37:28
Java代码审计实战:某开源系统源码审计教学文档
1. 审计概述
本次审计对象是一个公司网站开源模板系统,基于Java技术栈开发。审计过程中发现了多个安全漏洞,包括Struts2系列漏洞、文件上传漏洞和SQL注入漏洞。
2. 审计准备工作
2.1 环境搭建
- 导入项目到开发环境
- 了解项目目录结构
- 识别使用的框架版本(特别是Struts2)
2.2 审计工具
- 代码编辑器(用于浏览源码)
- 全局搜索功能(查找关键函数和变量)
- Struts2漏洞检测工具
3. 漏洞发现与分析
3.1 Struts2系列漏洞
发现过程:
- 浏览项目目录结构时发现使用了较老版本的Struts2框架
- 使用Struts2漏洞检测工具进行扫描
漏洞验证:
- 尝试上传webshell(虽然出现乱码问题,但证明漏洞存在)
风险等级: 高危
修复建议:
- 升级Struts2到最新安全版本
- 应用官方发布的安全补丁
3.2 文件上传漏洞
发现过程:
-
在action文件中发现文件上传相关代码
-
分析上传逻辑:
- 使用"uploadFileName"作为文件名
- 文件名格式为:时间戳+_+原文件名
- 未对文件后缀进行校验
-
追踪代码调用链:
- 全局搜索发现4处js使用了该上传方法
- 重点分析"add_ajax_upload.js"
- 查找使用该js的页面,发现"productInfoManage.jsp"有上传点
漏洞验证:
- 访问"productInfoManage.jsp"页面的添加功能
- 抓包上传jsp文件
- 确认上传成功
风险等级: 高危
修复建议:
- 增加文件类型白名单校验
- 限制可上传的文件扩展名
- 对上传文件进行内容检查
- 将上传文件存储在非web可访问目录
3.3 SQL注入漏洞
发现过程:
- 在action文件中发现查询功能,入参为noticeInfo
- 追踪调用链:
- noticeService.queryNotice方法
- 进入dao层发现SQL拼接操作
漏洞验证:
- 查找入参使用页面,发现"noticeManage.jsp"的查询功能使用了该方法
- 对搜索查询功能抓包注入
- 确认存在SQL注入
风险等级: 高危
修复建议:
- 使用预编译语句(PreparedStatement)替代字符串拼接
- 实施参数化查询
- 对输入参数进行严格的类型检查和过滤
- 使用ORM框架的安全查询方式
4. 审计方法论总结
4.1 审计流程
- 了解系统架构和使用的框架
- 检查已知框架的漏洞(如Struts2)
- 查找危险函数和操作(如文件操作、数据库查询)
- 追踪用户输入的数据流
- 验证漏洞存在性
4.2 重点关注点
- 用户输入点(表单、参数、上传等)
- 数据库操作方式
- 文件操作逻辑
- 框架版本和配置
- 权限控制机制
4.3 常用技术
- 代码全局搜索
- 调用链追踪
- 黑盒与白盒结合测试
- 使用专业工具辅助
5. 扩展学习建议
- 深入学习Java安全编码规范
- 研究OWASP Top 10中的相关漏洞
- 练习更多开源项目的代码审计
- 了解常见Web框架的安全机制
- 掌握专业代码审计工具的使用
6. 免责声明
本教学文档仅用于技术研究和学习目的,所有漏洞信息已报送厂商并修复。严禁将本文所述技术用于非法用途,否则产生的一切后果自行承担。