Java代码审计丨某开源系统源码审计
字数 1325 2025-08-18 11:37:28

Java代码审计实战:某开源系统源码审计教学文档

1. 审计概述

本次审计对象是一个公司网站开源模板系统,基于Java技术栈开发。审计过程中发现了多个安全漏洞,包括Struts2系列漏洞、文件上传漏洞和SQL注入漏洞。

2. 审计准备工作

2.1 环境搭建

  • 导入项目到开发环境
  • 了解项目目录结构
  • 识别使用的框架版本(特别是Struts2)

2.2 审计工具

  • 代码编辑器(用于浏览源码)
  • 全局搜索功能(查找关键函数和变量)
  • Struts2漏洞检测工具

3. 漏洞发现与分析

3.1 Struts2系列漏洞

发现过程:

  1. 浏览项目目录结构时发现使用了较老版本的Struts2框架
  2. 使用Struts2漏洞检测工具进行扫描

漏洞验证:

  • 尝试上传webshell(虽然出现乱码问题,但证明漏洞存在)

风险等级: 高危

修复建议:

  • 升级Struts2到最新安全版本
  • 应用官方发布的安全补丁

3.2 文件上传漏洞

发现过程:

  1. 在action文件中发现文件上传相关代码

  2. 分析上传逻辑:

    • 使用"uploadFileName"作为文件名
    • 文件名格式为:时间戳+_+原文件名
    • 未对文件后缀进行校验
  3. 追踪代码调用链:

    • 全局搜索发现4处js使用了该上传方法
    • 重点分析"add_ajax_upload.js"
    • 查找使用该js的页面,发现"productInfoManage.jsp"有上传点

漏洞验证:

  1. 访问"productInfoManage.jsp"页面的添加功能
  2. 抓包上传jsp文件
  3. 确认上传成功

风险等级: 高危

修复建议:

  • 增加文件类型白名单校验
  • 限制可上传的文件扩展名
  • 对上传文件进行内容检查
  • 将上传文件存储在非web可访问目录

3.3 SQL注入漏洞

发现过程:

  1. 在action文件中发现查询功能,入参为noticeInfo
  2. 追踪调用链:
    • noticeService.queryNotice方法
    • 进入dao层发现SQL拼接操作

漏洞验证:

  1. 查找入参使用页面,发现"noticeManage.jsp"的查询功能使用了该方法
  2. 对搜索查询功能抓包注入
  3. 确认存在SQL注入

风险等级: 高危

修复建议:

  • 使用预编译语句(PreparedStatement)替代字符串拼接
  • 实施参数化查询
  • 对输入参数进行严格的类型检查和过滤
  • 使用ORM框架的安全查询方式

4. 审计方法论总结

4.1 审计流程

  1. 了解系统架构和使用的框架
  2. 检查已知框架的漏洞(如Struts2)
  3. 查找危险函数和操作(如文件操作、数据库查询)
  4. 追踪用户输入的数据流
  5. 验证漏洞存在性

4.2 重点关注点

  • 用户输入点(表单、参数、上传等)
  • 数据库操作方式
  • 文件操作逻辑
  • 框架版本和配置
  • 权限控制机制

4.3 常用技术

  • 代码全局搜索
  • 调用链追踪
  • 黑盒与白盒结合测试
  • 使用专业工具辅助

5. 扩展学习建议

  1. 深入学习Java安全编码规范
  2. 研究OWASP Top 10中的相关漏洞
  3. 练习更多开源项目的代码审计
  4. 了解常见Web框架的安全机制
  5. 掌握专业代码审计工具的使用

6. 免责声明

本教学文档仅用于技术研究和学习目的,所有漏洞信息已报送厂商并修复。严禁将本文所述技术用于非法用途,否则产生的一切后果自行承担。

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. 免责声明 本教学文档仅用于技术研究和学习目的,所有漏洞信息已报送厂商并修复。严禁将本文所述技术用于非法用途,否则产生的一切后果自行承担。