Mini-Tmall 后台未授权reward接口SQL时间盲注漏洞分析(CVE-2024-40560)
字数 1279 2025-08-29 08:30:05

Mini-Tmall 后台未授权reward接口SQL时间盲注漏洞分析(CVE-2024-40560) 教学文档

1. 漏洞概述

Mini-Tmall是一个多用户电子商务商城平台,基于Java开发的新零售电商系统。该系统存在一个高危漏洞组合:

  1. 未授权访问漏洞:可绕过登录直接访问后台接口
  2. SQL时间盲注漏洞:在reward接口存在可被利用的SQL注入点

2. 漏洞分析

2.1 SQL注入漏洞分析

漏洞位置

  • 文件路径:mybatis/mapper/RewardMapper.xml
  • 具体行号:第74行
  • 漏洞代码:${orderUtil.orderBy}

漏洞成因

  1. MyBatis使用${}进行参数拼接而非预编译的#{},导致SQL注入
  2. orderUtil.orderBy参数完全可控,未做任何过滤

调用链分析

  1. RewardMapper.xml中的SQL语句使用${orderUtil.orderBy}拼接排序条件
  2. RewardMapper.java(第17行)声明了select()方法
  3. RewardServiceImpl.java(第43行)调用rewardMapper.select()
  4. RewardController.java(第97行)的getList()方法最终调用上述服务

OrderUtil类分析

  • 通过orderUtil = new OrderUtil(orderBy, isDesc)构造
  • orderBy参数完全可控,直接用于SQL语句拼接

2.2 未授权访问漏洞分析

漏洞位置

  • 文件路径:filter拦截器配置
  • 漏洞逻辑:当URL包含/admin/login/admin/account时,过滤器不会进行权限校验

漏洞利用

  • 攻击者可构造包含上述关键字的URL绕过权限检查
  • 结合此漏洞可未授权访问后台所有接口

3. 漏洞复现

3.1 环境准备

  • 搭建Mini-Tmall测试环境
  • 准备SQL注入测试工具(sqlmap等)

3.2 复现步骤

  1. 构造包含/admin/login/admin/account的URL绕过权限检查
  2. 访问reward接口,添加orderBy参数
  3. 使用时间盲注payload进行测试,如:
    orderBy=(case when (substring(database(),1,1)='a') then sleep(5) else 0 end)
    
  4. 观察响应时间判断注入是否成功

3.3 自动化工具利用

  • 使用sqlmap等工具自动化利用:
    sqlmap -u "http://target/reward?orderBy=test" --technique=T --dbms=mysql
    

4. 修复建议

4.1 SQL注入修复

  1. RewardMapper.xml中的${orderUtil.orderBy}改为#{orderUtil.orderBy}
  2. 对排序字段进行白名单校验
  3. 使用预编译语句

4.2 未授权访问修复

  1. 修改过滤器逻辑,严格校验所有后台接口权限
  2. 实现基于角色的访问控制(RBAC)
  3. 移除URL关键字匹配的权限绕过逻辑

5. 总结

该漏洞组合危害严重,攻击者可利用未授权访问漏洞绕过登录,再通过时间盲注获取数据库敏感信息。开发人员应:

  1. 避免使用${}进行SQL拼接
  2. 对所有后台接口实施严格的权限控制
  3. 对用户输入进行严格过滤和校验
Mini-Tmall 后台未授权reward接口SQL时间盲注漏洞分析(CVE-2024-40560) 教学文档 1. 漏洞概述 Mini-Tmall是一个多用户电子商务商城平台,基于Java开发的新零售电商系统。该系统存在一个高危漏洞组合: 未授权访问漏洞:可绕过登录直接访问后台接口 SQL时间盲注漏洞:在reward接口存在可被利用的SQL注入点 2. 漏洞分析 2.1 SQL注入漏洞分析 漏洞位置 文件路径: mybatis/mapper/RewardMapper.xml 具体行号:第74行 漏洞代码: ${orderUtil.orderBy} 漏洞成因 MyBatis使用 ${} 进行参数拼接而非预编译的 #{} ,导致SQL注入 orderUtil.orderBy 参数完全可控,未做任何过滤 调用链分析 RewardMapper.xml 中的SQL语句使用 ${orderUtil.orderBy} 拼接排序条件 RewardMapper.java (第17行)声明了 select() 方法 RewardServiceImpl.java (第43行)调用 rewardMapper.select() RewardController.java (第97行)的 getList() 方法最终调用上述服务 OrderUtil类分析 通过 orderUtil = new OrderUtil(orderBy, isDesc) 构造 orderBy 参数完全可控,直接用于SQL语句拼接 2.2 未授权访问漏洞分析 漏洞位置 文件路径: filter 拦截器配置 漏洞逻辑:当URL包含 /admin/login 或 /admin/account 时,过滤器不会进行权限校验 漏洞利用 攻击者可构造包含上述关键字的URL绕过权限检查 结合此漏洞可未授权访问后台所有接口 3. 漏洞复现 3.1 环境准备 搭建Mini-Tmall测试环境 准备SQL注入测试工具(sqlmap等) 3.2 复现步骤 构造包含 /admin/login 或 /admin/account 的URL绕过权限检查 访问 reward 接口,添加 orderBy 参数 使用时间盲注payload进行测试,如: 观察响应时间判断注入是否成功 3.3 自动化工具利用 使用sqlmap等工具自动化利用: 4. 修复建议 4.1 SQL注入修复 将 RewardMapper.xml 中的 ${orderUtil.orderBy} 改为 #{orderUtil.orderBy} 对排序字段进行白名单校验 使用预编译语句 4.2 未授权访问修复 修改过滤器逻辑,严格校验所有后台接口权限 实现基于角色的访问控制(RBAC) 移除URL关键字匹配的权限绕过逻辑 5. 总结 该漏洞组合危害严重,攻击者可利用未授权访问漏洞绕过登录,再通过时间盲注获取数据库敏感信息。开发人员应: 避免使用 ${} 进行SQL拼接 对所有后台接口实施严格的权限控制 对用户输入进行严格过滤和校验