Mini_Tmall审计过程记录
字数 1036 2025-08-24 16:48:07

Mini_Tmall 代码审计与漏洞分析教学文档

1. 环境搭建

1.1 项目获取与配置

  • 项目地址: https://gitee.com/project_team/Tmall_demo.git
  • 项目结构: 基于SpringBoot框架,结构简单
  • 配置步骤:
    1. 修改application.properties中的数据库配置文件
    2. 运行TmallSpringBootApplication主类

1.2 MySQL版本兼容性问题解决

问题现象:

Error querying database. Cause: java.sql.SQLSyntaxErrorException: Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'tmalldemodb.category.category_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因分析:

  • MySQL 5.7+版本默认启用了ONLY_FULL_GROUP_BY模式
  • 这是一种严格的SQL模式,要求GROUP BY语句必须包含所有查询字段

解决方案:

  1. 推荐方案: 执行以下SQL语句修改全局SQL模式
set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  1. 备选方案: 降级使用MySQL 5.7版本

注意: 修改后需要重启SpringBoot应用

2. 漏洞审计与分析

2.1 权限绕过任意文件上传漏洞

漏洞原理:

  • 过滤器使用contains方法判断URL是否放行
  • 可通过路径遍历方式绕过,如构造/admin/login/../../xxx

漏洞验证:

  1. 找到文件上传接口,发现无任何限制
  2. 构造请求上传任意文件
  3. 验证文件可被访问

相关位置:

  • 存在多处类似漏洞点

2.2 SQL注入漏洞(1)

审计方法:

  1. 项目使用MyBatis框架,重点关注$符号的使用
  2. 全局搜索$定位潜在风险点

漏洞定位:

  1. 找到DAO层使用$的SQL语句
  2. 跟踪调用链:
    • 第一处调用: 参数不可控,风险低
    • 第二处调用: 参数完全可控,存在注入风险

漏洞验证:

  • 构造恶意SQL参数
  • 使用sqlmap可成功利用

2.3 SQL注入漏洞(2)

审计流程:

  1. 类似前述方法跟踪$使用
  2. admin/order处发现调用点
  3. orderUtil参数可控

其他发现:

  • 项目中还存在3-4处类似漏洞点

3. 组件分析

  • 项目使用的组件版本普遍较新
  • 但仍存在经典安全问题

4. 总结

项目特点:

  • 结构简单,适合安全审计初学者练手
  • 包含多种典型漏洞模式
  • 可作为MyBatis框架安全审计的典型案例

审计要点总结:

  1. 过滤器实现方式检查
  2. MyBatis中$#的使用区分
  3. 参数可控性分析
  4. 权限验证机制评估

改进建议:

  1. 使用精确匹配而非contains进行URL过滤
  2. 避免直接使用$拼接SQL
  3. 对文件上传进行严格限制
  4. 实现完善的权限验证机制
Mini_ Tmall 代码审计与漏洞分析教学文档 1. 环境搭建 1.1 项目获取与配置 项目地址: https://gitee.com/project_ team/Tmall_ demo.git 项目结构: 基于SpringBoot框架,结构简单 配置步骤: 修改 application.properties 中的数据库配置文件 运行 TmallSpringBootApplication 主类 1.2 MySQL版本兼容性问题解决 问题现象 : 原因分析 : MySQL 5.7+版本默认启用了 ONLY_FULL_GROUP_BY 模式 这是一种严格的SQL模式,要求GROUP BY语句必须包含所有查询字段 解决方案 : 推荐方案 : 执行以下SQL语句修改全局SQL模式 备选方案 : 降级使用MySQL 5.7版本 注意 : 修改后需要重启SpringBoot应用 2. 漏洞审计与分析 2.1 权限绕过任意文件上传漏洞 漏洞原理 : 过滤器使用 contains 方法判断URL是否放行 可通过路径遍历方式绕过,如构造 /admin/login/../../xxx 漏洞验证 : 找到文件上传接口,发现无任何限制 构造请求上传任意文件 验证文件可被访问 相关位置 : 存在多处类似漏洞点 2.2 SQL注入漏洞(1) 审计方法 : 项目使用MyBatis框架,重点关注 $ 符号的使用 全局搜索 $ 定位潜在风险点 漏洞定位 : 找到DAO层使用 $ 的SQL语句 跟踪调用链: 第一处调用: 参数不可控,风险低 第二处调用: 参数完全可控,存在注入风险 漏洞验证 : 构造恶意SQL参数 使用sqlmap可成功利用 2.3 SQL注入漏洞(2) 审计流程 : 类似前述方法跟踪 $ 使用 在 admin/order 处发现调用点 orderUtil 参数可控 其他发现 : 项目中还存在3-4处类似漏洞点 3. 组件分析 项目使用的组件版本普遍较新 但仍存在经典安全问题 4. 总结 项目特点 : 结构简单,适合安全审计初学者练手 包含多种典型漏洞模式 可作为MyBatis框架安全审计的典型案例 审计要点总结 : 过滤器实现方式检查 MyBatis中 $ 与 # 的使用区分 参数可控性分析 权限验证机制评估 改进建议 : 使用精确匹配而非contains进行URL过滤 避免直接使用 $ 拼接SQL 对文件上传进行严格限制 实现完善的权限验证机制