Tmall_demo商城代码审计
字数 1913 2025-10-01 14:05:44
Tmall_demo商城代码审计教学文档
环境搭建
项目准备
- 项目地址:https://gitee.com/project_team/Tmall_demo
- 数据库配置:修改
src/main/resources/application.properties中的数据库配置信息 - 数据库初始化:创建对应数据库并导入SQL文件
- JDK版本:1.8
- 前台地址:http://127.0.0.1:8080/tmall
- 后台地址:http://127.0.0.1:8080/tmall/admin
- 管理员账户:admin/123456
故障排除
若登录后台出现"500系统错误",需修改src/main/resources/mybatis/mapper/ProductMapper.xml中的最后一条select语句:
<select id="selectTotalByGroupCategory" resultType="map">
SELECT category.category_name name, COUNT(0) value
FROM product
LEFT JOIN category ON category.category_id = product.product_category_id
GROUP BY category.category_id, category.category_name
ORDER BY category.category_id
</select>
代码审计发现的安全漏洞
1. 鉴权绕过漏洞
漏洞位置
- 过滤器中仅检查URL中包含
/admin/login或/admin/account即放行 - 未对管理员功能进行完整身份验证
利用方法
- 访问需要管理员权限的接口(如人员信息查询)
- 在URL前添加
/admin/login或/admin/account结合目录穿越 - 示例:
http://example.com/admin/login/../admin/user/list
修复建议
- 实现完整的身份验证机制
- 使用权限验证框架(如Shiro, Spring Security)
- 避免使用简单的字符串匹配进行权限验证
2. 前台文件上传漏洞
漏洞位置
- 前台个人资料头像上传功能
- 路由:
/user/uploadUserHeadImage
漏洞详情
- 前端仅校验MIME类型和文件大小
- 后端未对文件内容进行安全检测
- 仅对文件名进行UUID编码,但保留原始扩展名
- 存在JSP解析依赖,可执行Webshell
利用方法
- 使用哥斯拉生成JSP木马,后缀改为png
- 上传时抓包,将文件名后缀改回jsp
- 访问上传的JSP文件获取Webshell
修复建议
- 后端验证文件类型(检查文件头而非扩展名)
- 限制上传文件类型白名单
- 将上传文件存储在非Web可访问目录
- 对图像文件进行重采样处理
3. 多处SQL注入漏洞
漏洞位置
- 使用Mybatis框架且使用
${}而非#{}进行参数拼接 - 影响接口:
admin/product/{index}/{count}admin/user/{index}/{count}admin/reward/{index}/{count}product/{index}/{count}
漏洞详情
orderUtil.orderBy参数直接拼接SQL语句- 参数通过
get方法获取,用户可控
利用方法
- 在orderBy参数中注入SQL语句
- 使用SQLMap进行自动化检测:
sqlmap -u "http://example.com/admin/product/1/10?orderBy=id" --dbs
修复建议
- 使用Mybatis的
#{}预编译方式 - 对orderBy参数进行白名单验证
- 使用参数化查询
4. 多处跨站脚本(XSS)漏洞
4.1 所有产品处XSS
漏洞位置
- 商品添加/编辑功能中的输入框
利用方法
- 在商品名称等字段插入:
<script>alert(1)</script> - 搜索或浏览商品时触发XSS
4.2 前台下单/后台查询订单处XSS
漏洞位置
- 订单处理功能中的用户输入字段
利用方法
- 在下单过程中注入XSS payload
- 后台管理员查看订单详情时触发
4.3 管理员昵称处XSS
漏洞位置
- 管理员个人信息修改功能
利用方法
- 修改管理员昵称为XSS payload
- 重新登录或查看管理员信息时触发
修复建议
- 对所有用户输入进行HTML编码
- 使用CSP(Content Security Policy)策略
- 设置HttpOnly标志保护Cookie
- 实施输入验证和输出编码
安全加固建议
1. 身份验证与授权
- 实现完整的会话管理
- 使用强密码策略
- 实施多因素认证
- 定期审查权限分配
2. 输入验证
- 实施白名单验证策略
- 对所有输入数据进行严格验证
- 使用安全的API处理用户输入
3. 安全编码实践
- 避免直接拼接SQL语句
- 使用预编译语句和参数化查询
- 实施安全的文件上传机制
- 对所有输出进行适当的编码
4. 安全监控
- 记录安全相关事件
- 实施实时入侵检测
- 定期进行安全审计和代码审查
总结
Tmall_demo商城存在多处严重安全漏洞,包括鉴权绕过、文件上传、SQL注入和XSS漏洞。这些漏洞的组合可能允许攻击者获取系统权限、窃取敏感数据或完全控制应用系统。建议立即修复这些漏洞并实施全面的安全开发生命周期(SDLC)流程。