代码审计 | 某商城系统
字数 1634 2025-08-22 12:23:41
某商城系统代码审计教学文档
一、环境搭建
- 下载商城系统源码
- 使用IDEA导入项目
- 启动环境
二、第三方组件漏洞审计
1. 组件版本清单
| 组件名称 | 组件版本 | 存在漏洞 |
|---|---|---|
| SpringBoot | 2.1.6.RELEASE | - |
| Fastjson | 1.2.58 | 反序列化漏洞 |
| Mysql | 5.1.47 | - |
| Druid | 1.1.19 | - |
| Taglibs | 1.2.5 | - |
| Mybatis | 3.5.1 | 远程命令执行漏洞(需特定条件) |
| Log4j | 2.10.0 | 远程代码执行漏洞 |
2. Fastjson漏洞审计(1.2.58)
漏洞描述
Fastjson 1.2.58版本存在反序列化漏洞
漏洞定位
- 全局搜索
JSON.parse()和JSON.parseObject() - 在
ProductController.java第151行发现漏洞点:JSON.parseObject(propertyJson)propertyJson参数来自"添加产品信息"接口中的"产品属性JSON"字段
验证方法
构造Fastjson的payload替换propertyJson参数值
3. Log4j漏洞审计(2.10.0)
漏洞描述
Log4j 2.10.0版本存在远程代码执行漏洞
漏洞定位
- 全局搜索
logger - 在
AccountController.java中发现漏洞点:logger.info("获取图片原始文件名:{}", originalFileName);originalFileName来自file.getOriginalFilename()file参数来自admin/uploadAdminHeadImage接口(管理员头像上传功能)
利用方法
上传头像时,将文件名改为攻击语句
4. Mybatis漏洞审计(3.5.1)
漏洞描述
Mybatis < 3.5.6存在远程代码执行漏洞(CVE-2020-26945)
触发条件
- 启用了内置的二级缓存(默认关闭)
- 未设置JEP-290过滤器
- 攻击者能修改
org.apache.ibatis.cache.impl.PerpetualCache.cache的缓存密钥
审计结果
检查mybatis配置文件,未发现开启二级缓存的配置:
<setting name="cacheEnabled" value="true" />
因此该漏洞在本项目中不存在
三、单点功能漏洞审计
1. SQL注入漏洞
漏洞定位
- 全局搜索
$符号(Mybatis中直接拼接SQL) - 在
UserMapper.xml中发现order by使用$拼接:order by ${orderUtil.orderBy} ${orderUtil.isDesc} - 逆向追踪调用链:
UserMapper.xml→UserMapper.java→UserServiceImpl.java→UserController.java
- 最终参数来自
admin/user/{index}/{count}接口的orderBy参数
验证方法
使用sqlmap测试,确认存在时间盲注
2. XSS漏洞
审计过程
- 检查filter层,未发现XSS过滤代码
- 检查前端框架,使用传统JSP且无内置XSS防护
- 确认存在存储型XSS漏洞
利用方法
在用户输入点注入XSS payload
3. 任意文件上传漏洞
漏洞定位
- 在管理员头像上传功能中发现文件上传点
- SpringBoot内嵌Tomcat支持JSP解析
- 未对上传文件类型进行严格限制
利用方法
直接上传JSP webshell文件
四、总结
高危漏洞清单
- Fastjson 1.2.58反序列化漏洞
- Log4j 2.10.0远程代码执行漏洞
- SQL注入漏洞(order by注入)
- 存储型XSS漏洞
- 任意文件上传漏洞
修复建议
- 升级Fastjson至最新安全版本
- 升级Log4j至2.17.0或更高版本
- 对order by参数进行白名单过滤
- 添加XSS过滤器或对输出进行编码
- 限制上传文件类型,禁止上传可执行文件