Mini_Tmall审计过程记录
字数 1036 2025-08-24 16:48:07
Mini_Tmall 代码审计与漏洞分析教学文档
1. 环境搭建
1.1 项目获取与配置
- 项目地址: https://gitee.com/project_team/Tmall_demo.git
- 项目结构: 基于SpringBoot框架,结构简单
- 配置步骤:
- 修改
application.properties中的数据库配置文件 - 运行
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语句必须包含所有查询字段
解决方案:
- 推荐方案: 执行以下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';
- 备选方案: 降级使用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 - 对文件上传进行严格限制
- 实现完善的权限验证机制