代码审计 | 某商城系统
字数 1634 2025-08-22 12:23:41

某商城系统代码审计教学文档

一、环境搭建

  1. 下载商城系统源码
  2. 使用IDEA导入项目
  3. 启动环境

二、第三方组件漏洞审计

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版本存在反序列化漏洞

漏洞定位

  1. 全局搜索JSON.parse()JSON.parseObject()
  2. ProductController.java第151行发现漏洞点:
    JSON.parseObject(propertyJson)
    
    • propertyJson参数来自"添加产品信息"接口中的"产品属性JSON"字段

验证方法

构造Fastjson的payload替换propertyJson参数值

3. Log4j漏洞审计(2.10.0)

漏洞描述

Log4j 2.10.0版本存在远程代码执行漏洞

漏洞定位

  1. 全局搜索logger
  2. AccountController.java中发现漏洞点:
    logger.info("获取图片原始文件名:{}", originalFileName);
    
    • originalFileName来自file.getOriginalFilename()
    • file参数来自admin/uploadAdminHeadImage接口(管理员头像上传功能)

利用方法

上传头像时,将文件名改为攻击语句

4. Mybatis漏洞审计(3.5.1)

漏洞描述

Mybatis < 3.5.6存在远程代码执行漏洞(CVE-2020-26945)

触发条件

  1. 启用了内置的二级缓存(默认关闭)
  2. 未设置JEP-290过滤器
  3. 攻击者能修改org.apache.ibatis.cache.impl.PerpetualCache.cache的缓存密钥

审计结果

检查mybatis配置文件,未发现开启二级缓存的配置:

<setting name="cacheEnabled" value="true" />

因此该漏洞在本项目中不存在

三、单点功能漏洞审计

1. SQL注入漏洞

漏洞定位

  1. 全局搜索$符号(Mybatis中直接拼接SQL)
  2. UserMapper.xml中发现order by使用$拼接:
    order by ${orderUtil.orderBy} ${orderUtil.isDesc}
    
  3. 逆向追踪调用链:
    • UserMapper.xmlUserMapper.javaUserServiceImpl.javaUserController.java
  4. 最终参数来自admin/user/{index}/{count}接口的orderBy参数

验证方法

使用sqlmap测试,确认存在时间盲注

2. XSS漏洞

审计过程

  1. 检查filter层,未发现XSS过滤代码
  2. 检查前端框架,使用传统JSP且无内置XSS防护
  3. 确认存在存储型XSS漏洞

利用方法

在用户输入点注入XSS payload

3. 任意文件上传漏洞

漏洞定位

  1. 在管理员头像上传功能中发现文件上传点
  2. SpringBoot内嵌Tomcat支持JSP解析
  3. 未对上传文件类型进行严格限制

利用方法

直接上传JSP webshell文件

四、总结

高危漏洞清单

  1. Fastjson 1.2.58反序列化漏洞
  2. Log4j 2.10.0远程代码执行漏洞
  3. SQL注入漏洞(order by注入)
  4. 存储型XSS漏洞
  5. 任意文件上传漏洞

修复建议

  1. 升级Fastjson至最新安全版本
  2. 升级Log4j至2.17.0或更高版本
  3. 对order by参数进行白名单过滤
  4. 添加XSS过滤器或对输出进行编码
  5. 限制上传文件类型,禁止上传可执行文件
某商城系统代码审计教学文档 一、环境搭建 下载商城系统源码 使用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行发现漏洞点: propertyJson 参数来自"添加产品信息"接口中的"产品属性JSON"字段 验证方法 构造Fastjson的payload替换 propertyJson 参数值 3. Log4j漏洞审计(2.10.0) 漏洞描述 Log4j 2.10.0版本存在远程代码执行漏洞 漏洞定位 全局搜索 logger 在 AccountController.java 中发现漏洞点: 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 配置文件,未发现开启二级缓存的配置: 因此该漏洞在本项目中不存在 三、单点功能漏洞审计 1. SQL注入漏洞 漏洞定位 全局搜索 $ 符号(Mybatis中直接拼接SQL) 在 UserMapper.xml 中发现order by使用 $ 拼接: 逆向追踪调用链: 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过滤器或对输出进行编码 限制上传文件类型,禁止上传可执行文件