JAVA代审starsea-mall
字数 1591 2025-08-29 08:30:13
StarSea-Mall 代码审计报告
环境搭建
-
项目获取:
- 项目地址:https://github.com/StarSea99/starsea-mall
- 下载到本地后使用IDEA打开,等待Maven依赖加载完成
-
配置修改:
- 修改配置文件:
src/main/resources/application.properties - 创建对应数据库并导入SQL文件
- 修改配置文件:
-
启动项目:
- 后台管理地址:http://127.0.0.1:8080/admin/login
- 默认管理员账号:admin/admin
代码审计
1. 拦截器分析
项目中有三个主要拦截器:
-
AdminLoginInterceptor:
- 校验后台权限
- 检查访问地址是否以
/admin开头 - 从session中获取
loginUser,不存在则判定未登录 - 无绕过方法
-
MallCartNumberInterceptor:
- 更新购物车商品数量
- 从session获取用户信息,查询数据库获取购物车信息
- 修改购物车商品数量后保存
-
MallLoginInterceptor:
- 判断前台用户是否登录
2. 漏洞分析
2.1 任意会员登录
漏洞位置:用户信息修改功能
复现步骤:
- 在修改个人信息时抓包
- 发现请求中包含
userid参数 - 修改
userid为其他用户的ID
代码分析:
- 通过
userid查询用户信息 - 仅检查用户是否存在,未验证当前用户是否有权修改该ID的信息
- 直接更新传入的信息
- 从数据库查询更新后的用户信息并返回
影响:可实现任意用户登录(水平越权)
2.2 支付逻辑漏洞(0元购)
漏洞位置:订单支付功能
复现步骤:
- 正常下单并支付,抓取支付成功的数据包
- 分析发现支付逻辑修改订单的
PayType为传入的值 - 新建订单,修改数据包中的订单号为未支付的订单号
影响:可实现0元购,任意修改订单支付状态
2.3 购物车商品数量负数
漏洞位置:购物车商品数量修改
复现步骤:
- 修改购物车中商品数量为负数
- 提交请求
代码分析:
- 仅检查单个商品的最大数量限制
- 未验证数量是否为正整数
影响:可能导致金额计算异常或系统逻辑错误
2.4 任意文件上传
漏洞位置:后台文件上传功能
代码分析:
- 获取文件后缀名
- 未对文件后缀进行有效过滤
- 直接拼接后缀到文件名中
影响:
- 可上传HTML文件执行XSS攻击
- 若无解析环境限制,可能上传webshell
2.5 多处XSS漏洞
漏洞描述:
- 项目中多处用户输入未进行有效过滤
- 特别是在保存信息等功能点存在存储型XSS风险
2.6 CSRF漏洞
漏洞描述:
- 项目中未使用CSRF防护组件
- 未发现自定义的CSRF防护代码
- 测试可生成有效的CSRF PoC
复现步骤:
- 在修改用户名功能点抓包
- 生成CSRF PoC
- 诱使管理员点击
修复建议
-
权限控制:
- 在用户信息修改处增加权限验证,确保用户只能修改自己的信息
- 使用Spring Security等安全框架
-
支付逻辑:
- 支付完成后应验证支付金额与订单金额是否匹配
- 支付状态修改应增加签名验证
-
输入验证:
- 购物车数量应验证为正整数
- 所有用户输入应进行严格过滤
-
文件上传:
- 限制可上传的文件类型
- 使用白名单机制验证文件后缀
- 存储时重命名文件
-
CSRF防护:
- 添加CSRF Token机制
- 或使用Spring Security的CSRF防护
-
XSS防护:
- 对所有输出进行HTML编码
- 使用CSP策略限制脚本执行
总结
StarSea-Mall商城系统存在多处安全漏洞,包括但不限于:
- 权限绕过(任意用户登录)
- 支付逻辑缺陷(0元购)
- 业务逻辑漏洞(负数商品)
- 文件上传漏洞
- 多处XSS漏洞
- CSRF漏洞
建议开发者按照修复建议进行全面安全加固,特别是在涉及用户权限和支付逻辑的关键功能点。