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开发的新零售电商系统。该系统存在一个高危漏洞组合:
- 未授权访问漏洞:可绕过登录直接访问后台接口
- 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进行测试,如:
orderBy=(case when (substring(database(),1,1)='a') then sleep(5) else 0 end) - 观察响应时间判断注入是否成功
3.3 自动化工具利用
- 使用sqlmap等工具自动化利用:
sqlmap -u "http://target/reward?orderBy=test" --technique=T --dbms=mysql
4. 修复建议
4.1 SQL注入修复
- 将
RewardMapper.xml中的${orderUtil.orderBy}改为#{orderUtil.orderBy} - 对排序字段进行白名单校验
- 使用预编译语句
4.2 未授权访问修复
- 修改过滤器逻辑,严格校验所有后台接口权限
- 实现基于角色的访问控制(RBAC)
- 移除URL关键字匹配的权限绕过逻辑
5. 总结
该漏洞组合危害严重,攻击者可利用未授权访问漏洞绕过登录,再通过时间盲注获取数据库敏感信息。开发人员应:
- 避免使用
${}进行SQL拼接 - 对所有后台接口实施严格的权限控制
- 对用户输入进行严格过滤和校验