基于springboot架构项目的白盒审计经验分享
字数 1497 2025-08-11 17:40:15

SpringBoot项目白盒审计实战指南

一、背景与概述

Java语言因其面向对象、跨平台执行、高可移植性及丰富类库的特点,在CMS(内容管理系统)开发中占据重要地位。随着CMS功能增强,安全问题日益突出,代码审计成为安全研究员必备技能。

二、SpringBoot核心概念

2.1 SpringBoot特点

  • 轻量级框架,内置Tomcat/Jetty等Web容器
  • 无需部署WAR文件,简化配置
  • 通过Starter简化项目构建

2.2 与Spring框架对比

  • Spring需要大量XML配置
  • SpringBoot自动配置,约定优于配置
  • SpringBoot是Spring的"上层框架"

三、SpringBoot项目搭建

3.1 环境准备

  • JDK 8+
  • IntelliJ IDEA
  • MySQL 8.0+
  • Maven 3.8+

3.2 项目结构

SpringbootdemoApplication - 主启动类(基于main方法)
application.yml - 配置文件(端口/上下文路径等)
pom.xml - Maven依赖管理

3.3 关键依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

四、SpringBoot集成关键组件

4.1 Spring Security集成

安全框架功能

  • 提供声明式安全访问控制
  • 基于IoC和AOP实现

集成步骤

  1. 添加依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. 自定义认证逻辑:
public class CustomUserDetailsService implements UserDetailsService {
    // 实现数据库用户认证
}

4.2 MyBatis集成

持久层框架

  • Java对象与数据库表映射
  • 提供CRUD操作API

集成步骤

  1. 添加依赖:
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
  1. 配置数据源(application.yml):
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dbname
    username: root
    password: password
  1. 编写Mapper XML文件:
<mapper namespace="com.example.mapper.UserMapper">
    <select id="findById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

4.3 模板引擎集成

FreeMarker集成

  1. 添加依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  1. 创建模板文件(.ftlh):
<#list users as user>
    <p>${user.name}</p>
</#list>

Thymeleaf集成

  1. 添加依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  1. 创建模板文件(.html):
<div th:each="user : ${users}">
    <p th:text="${user.name}"></p>
</div>

五、白盒审计实战(以MCMS为例)

5.1 环境搭建

  1. 下载源码:https://gitee.com/mingSoft/MCMS/releases
  2. 导入数据库
  3. 修改application.yml配置
  4. 默认凭证:msopen/msopen

5.2 审计关键点

5.2.1 组件版本检查

  • 检查pom.xml中组件版本:
    • Log4j
    • Fastjson
    • Shiro
    • MyBatis

5.2.2 SQL注入审计

  1. 搜索MyBatis XML中的${}参数占位符
  2. 发现风险代码:
<select id="findByCategory" resultType="Content">
    SELECT * FROM cms_content 
    WHERE category_id IN 
    (SELECT id FROM cms_category 
     WHERE find_in_set('${categoryId}',CATEGORY_PARENT_IDS)>0)
</select>
  1. 定位调用链:
  • 前端接口:/ms/cms/content/list
  • 后端代码:ContentAction.java
  • 参数传递:无过滤直接使用
  1. 验证利用:
sqlmap -u "http://127.0.0.1:8080/ms/cms/content/list?categoryId=1" --dbs

5.2.3 文件上传审计

  1. 前端限制:仅允许zip/html/png/jpg
  2. 后端验证:
    • 上传路径可控
    • 文件类型检查不严格
  3. 绕过方法:
    • 上传包含恶意文件的zip
    • 直接访问上传路径

5.2.4 Shiro框架审计

  1. 检查密钥泄漏
  2. 测试默认凭证
  3. 检查权限控制

5.3 审计方法论

  1. 项目结构分析

    • 查看启动类和配置文件
    • 理解业务架构
  2. 输入点追踪

    • 关注Controller层参数接收
    • 检查过滤和验证逻辑
  3. 危险函数定位

    • SQL拼接(${})
    • 文件操作(File/Path)
    • 反序列化(ObjectInputStream)
  4. 工具辅助

    • IDEA全局搜索(Shift+Shift)
    • BurpSuite拦截分析
    • SQLMap自动化测试

六、防御建议

  1. SQL注入防护

    • 使用#{}替代${}
    • 实施参数化查询
    • 添加输入过滤
  2. 文件上传安全

    • 服务端文件类型验证
    • 随机化存储路径
    • 限制执行权限
  3. 组件安全

    • 及时更新依赖版本
    • 禁用不必要功能
    • 最小权限原则
  4. 框架加固

    • Shiro配置复杂密钥
    • Spring Security启用CSRF
    • 输入输出编码

七、参考资源

  1. Spring Security官方文档
  2. MyBatis SQL注入防护指南
  3. OWASP代码审计指南
SpringBoot项目白盒审计实战指南 一、背景与概述 Java语言因其面向对象、跨平台执行、高可移植性及丰富类库的特点,在CMS(内容管理系统)开发中占据重要地位。随着CMS功能增强,安全问题日益突出,代码审计成为安全研究员必备技能。 二、SpringBoot核心概念 2.1 SpringBoot特点 轻量级框架,内置Tomcat/Jetty等Web容器 无需部署WAR文件,简化配置 通过Starter简化项目构建 2.2 与Spring框架对比 Spring需要大量XML配置 SpringBoot自动配置,约定优于配置 SpringBoot是Spring的"上层框架" 三、SpringBoot项目搭建 3.1 环境准备 JDK 8+ IntelliJ IDEA MySQL 8.0+ Maven 3.8+ 3.2 项目结构 3.3 关键依赖 四、SpringBoot集成关键组件 4.1 Spring Security集成 安全框架功能 : 提供声明式安全访问控制 基于IoC和AOP实现 集成步骤 : 添加依赖: 自定义认证逻辑: 4.2 MyBatis集成 持久层框架 : Java对象与数据库表映射 提供CRUD操作API 集成步骤 : 添加依赖: 配置数据源(application.yml): 编写Mapper XML文件: 4.3 模板引擎集成 FreeMarker集成 添加依赖: 创建模板文件(.ftlh): Thymeleaf集成 添加依赖: 创建模板文件(.html): 五、白盒审计实战(以MCMS为例) 5.1 环境搭建 下载源码:https://gitee.com/mingSoft/MCMS/releases 导入数据库 修改application.yml配置 默认凭证:msopen/msopen 5.2 审计关键点 5.2.1 组件版本检查 检查pom.xml中组件版本: Log4j Fastjson Shiro MyBatis 5.2.2 SQL注入审计 搜索MyBatis XML中的 ${} 参数占位符 发现风险代码: 定位调用链: 前端接口: /ms/cms/content/list 后端代码: ContentAction.java 参数传递:无过滤直接使用 验证利用: 5.2.3 文件上传审计 前端限制:仅允许zip/html/png/jpg 后端验证: 上传路径可控 文件类型检查不严格 绕过方法: 上传包含恶意文件的zip 直接访问上传路径 5.2.4 Shiro框架审计 检查密钥泄漏 测试默认凭证 检查权限控制 5.3 审计方法论 项目结构分析 : 查看启动类和配置文件 理解业务架构 输入点追踪 : 关注Controller层参数接收 检查过滤和验证逻辑 危险函数定位 : SQL拼接( ${} ) 文件操作(File/Path) 反序列化(ObjectInputStream) 工具辅助 : IDEA全局搜索(Shift+Shift) BurpSuite拦截分析 SQLMap自动化测试 六、防御建议 SQL注入防护 : 使用 #{} 替代 ${} 实施参数化查询 添加输入过滤 文件上传安全 : 服务端文件类型验证 随机化存储路径 限制执行权限 组件安全 : 及时更新依赖版本 禁用不必要功能 最小权限原则 框架加固 : Shiro配置复杂密钥 Spring Security启用CSRF 输入输出编码 七、参考资源 Spring Security官方文档 MyBatis SQL注入防护指南 OWASP代码审计指南