记某系统SQL注入审计
字数 1656 2025-08-06 12:20:59

JEECG框架仓库系统SQL注入漏洞审计与分析

0x00 系统概述

本文档详细分析基于JEECG框架的仓库系统中存在的SQL注入漏洞,包括路由分析、鉴权机制、权限绕过方法和SQL注入原理。

0x01 路由分析

系统提供三种路由形式:

  • .do 后缀
  • .action 后缀
  • /rest/ 前缀

路由配置位于:src/main/webapp/WEB-INF/web.xml

0x02 鉴权机制分析

Filter层

系统未配置用于权限认证的Filter

Interceptor层

配置位于:src/main/resources/spring-mvc.xml

定义了四个拦截器:

  1. EncodingInterceptor

    • 功能:设置请求包和响应包的编码格式
    • 无安全相关功能
  2. SignInterceptor

    • 实现中注释掉了原有处理流程,直接返回true
    • 无实际鉴权作用
  3. AuthInterceptor

    • mapping为/**(处理所有请求)
    • 主要鉴权拦截器
  4. WmsApiInterceptor

    • mapping同样为/**
    • 辅助鉴权拦截器

0x03 权限绕过分析

AuthInterceptor绕过

spring-mvc.xml中配置了两个白名单属性:

  • excludeUrls
  • excludeContainUrls

鉴权逻辑(preHandle方法):

  1. 当URL包含rest/时直接放行
  2. 当URL匹配excludeUrlsexcludeContainUrls时放行

绕过方法
使用rest/前缀或wmOmNoticeHController.do路径可绕过鉴权

WmsApiInterceptor绕过

鉴权逻辑:

  1. 当请求URL在containUrls列表中时:
    • 获取header中Authorization
    • 使用JwtUtils解析
    • 当解析值等于wmsAccount时放行

漏洞点

  • JwtUtils硬编码了JWT密钥
  • 可自行构造有效token

绕过方法
使用硬编码密钥构造Authorization头,值为wmsAccount

0x04 SQL注入漏洞分析

技术栈

  • 使用Hibernate框架进行数据库操作
  • 存在HQL查询功能

漏洞位置

关键类:src/main/java/xx/xx/xx/extend/hqlsearch/HqlGenerateUtil

漏洞方法:installHql()

  • 调用Restrictions.sqlRestriction()进行查询
  • sqlbuilder参数获取查询条件(JSON格式)
  • 未对输入进行充分过滤

数据流分析

  1. 前端传递sqlbuilder参数(隐藏字段)
  2. 后端使用JSONHelper.toList()将JSON转为QueryCondition对象列表
  3. QueryCondition类结构:
    public class QueryCondition {
        private String field;  // 字段名
        private String type;   // 字段类型
        private String condition; // 条件
        private String value;  // 值
        private String relation; // 关系(and/or)
    }
    
  4. 通过getSql()方法拼接SQL字符串
  5. 最终调用toString()方法拼接查询条件

漏洞利用

构造恶意sqlbuilder参数:

[{
    "field": "createName",
    "type": "string",
    "condition": "is not null and user() like '%25r%25' and '1' like ",
    "value": "%251%25",
    "relation": "and"
}]

生成的SQL语句:

1=1 and create_name is not null and user() like '%r%' and '1' like '%1%'

完整利用链

  1. 通过鉴权绕过访问受保护接口
  2. 构造恶意sqlbuilder参数
  3. 触发SQL注入

0x05 修复建议

  1. 鉴权修复

    • 移除硬编码的JWT密钥
    • 加强AuthInterceptor的白名单管理
    • 实现完整的权限验证流程
  2. SQL注入修复

    • sqlbuilder参数进行严格校验
    • 使用预编译语句替代直接拼接
    • 实现参数化查询
    • 添加输入过滤机制
  3. 架构改进

    • 实现统一的权限验证Filter
    • 分离前后端接口权限
    • 增加安全审计日志

0x06 总结

本漏洞展示了典型的权限绕过与SQL注入组合漏洞:

  1. 通过分析路由和拦截器发现鉴权缺陷
  2. 利用硬编码密钥和宽松的白名单策略绕过权限控制
  3. 通过未过滤的HQL参数注入实现SQL注入

此类漏洞在基于框架开发的系统中较为常见,开发人员应特别注意框架的安全配置和自定义功能的输入验证。

JEECG框架仓库系统SQL注入漏洞审计与分析 0x00 系统概述 本文档详细分析基于JEECG框架的仓库系统中存在的SQL注入漏洞,包括路由分析、鉴权机制、权限绕过方法和SQL注入原理。 0x01 路由分析 系统提供三种路由形式: .do 后缀 .action 后缀 /rest/ 前缀 路由配置位于: src/main/webapp/WEB-INF/web.xml 0x02 鉴权机制分析 Filter层 系统未配置用于权限认证的Filter Interceptor层 配置位于: src/main/resources/spring-mvc.xml 定义了四个拦截器: EncodingInterceptor 功能:设置请求包和响应包的编码格式 无安全相关功能 SignInterceptor 实现中注释掉了原有处理流程,直接返回true 无实际鉴权作用 AuthInterceptor mapping为 /** (处理所有请求) 主要鉴权拦截器 WmsApiInterceptor mapping同样为 /** 辅助鉴权拦截器 0x03 权限绕过分析 AuthInterceptor绕过 在 spring-mvc.xml 中配置了两个白名单属性: excludeUrls excludeContainUrls 鉴权逻辑( preHandle 方法): 当URL包含 rest/ 时直接放行 当URL匹配 excludeUrls 或 excludeContainUrls 时放行 绕过方法 : 使用 rest/ 前缀或 wmOmNoticeHController.do 路径可绕过鉴权 WmsApiInterceptor绕过 鉴权逻辑: 当请求URL在 containUrls 列表中时: 获取header中 Authorization 值 使用JwtUtils解析 当解析值等于 wmsAccount 时放行 漏洞点 : JwtUtils硬编码了JWT密钥 可自行构造有效token 绕过方法 : 使用硬编码密钥构造 Authorization 头,值为 wmsAccount 0x04 SQL注入漏洞分析 技术栈 使用Hibernate框架进行数据库操作 存在HQL查询功能 漏洞位置 关键类: src/main/java/xx/xx/xx/extend/hqlsearch/HqlGenerateUtil 漏洞方法: installHql() 调用 Restrictions.sqlRestriction() 进行查询 从 sqlbuilder 参数获取查询条件(JSON格式) 未对输入进行充分过滤 数据流分析 前端传递 sqlbuilder 参数(隐藏字段) 后端使用 JSONHelper.toList() 将JSON转为 QueryCondition 对象列表 QueryCondition 类结构: 通过 getSql() 方法拼接SQL字符串 最终调用 toString() 方法拼接查询条件 漏洞利用 构造恶意 sqlbuilder 参数: 生成的SQL语句: 完整利用链 通过鉴权绕过访问受保护接口 构造恶意 sqlbuilder 参数 触发SQL注入 0x05 修复建议 鉴权修复 : 移除硬编码的JWT密钥 加强AuthInterceptor的白名单管理 实现完整的权限验证流程 SQL注入修复 : 对 sqlbuilder 参数进行严格校验 使用预编译语句替代直接拼接 实现参数化查询 添加输入过滤机制 架构改进 : 实现统一的权限验证Filter 分离前后端接口权限 增加安全审计日志 0x06 总结 本漏洞展示了典型的权限绕过与SQL注入组合漏洞: 通过分析路由和拦截器发现鉴权缺陷 利用硬编码密钥和宽松的白名单策略绕过权限控制 通过未过滤的HQL参数注入实现SQL注入 此类漏洞在基于框架开发的系统中较为常见,开发人员应特别注意框架的安全配置和自定义功能的输入验证。