JeecgBoot小于3.6.0版本存在SQL注入漏洞
字数 1205 2025-08-20 18:17:58

JeecgBoot SQL注入漏洞分析与防护指南

漏洞概述

JeecgBoot框架在3.6.0以下版本中存在一个严重的SQL注入漏洞,位于/sys/api/queryFilterTableDictInfo接口。攻击者可以利用此漏洞直接查询数据库中的任意表数据,导致敏感信息泄露。

漏洞详情

漏洞接口

/sys/api/queryFilterTableDictInfo

漏洞参数

  • table: 指定要查询的表名
  • text: 指定要查询的字段名(作为显示文本)
  • code: 指定要查询的字段名(作为值)
  • filterSql: 过滤条件(可选)
  • pageSize: 每页记录数
  • pageNo: 页码

漏洞原理

前端用户可控参数tabletextcode未经充分过滤直接拼接到SQL查询中,导致攻击者可以构造恶意参数查询任意表数据。

漏洞复现步骤

  1. 获取有效Token:

    • 首先需要获取一个有效的用户认证Token(通过正常登录或其他方式)
  2. 构造恶意请求:

    GET /jeecg-boot/sys/api/queryFilterTableDictInfo?table=sys_user&text=username&code=password&filterSql=&pageSize=1000&pageNo=1
    

    携带有效Token访问上述URL

  3. 结果分析:

    • 成功响应将返回sys_user表中的所有用户名和密码
    • 通过修改table参数可以查询其他表数据
    • 错误响应可能暴露数据库结构信息(如库名onenext_init

漏洞影响

  1. 数据泄露:

    • 可以获取用户凭证(用户名和密码)
    • 可以查询业务敏感数据(如示例中的tax_task表)
    • 可以获取数据库元信息
  2. 系统危害:

    • 完全数据库信息泄露
    • 可能导致进一步权限提升
    • 可能引发数据篡改风险

漏洞利用前提

  1. 获取有效的用户Token
  2. 目标系统使用JeecgBoot 3.6.0以下版本
  3. 漏洞接口未被禁用或加固

修复建议

临时缓解措施

  1. 禁用漏洞接口:

    • 在应用层禁用/sys/api/queryFilterTableDictInfo接口的访问
  2. 访问控制:

    • 对接口增加严格的权限控制
    • 限制可查询的表和字段范围

长期解决方案

  1. 升级框架:

    • 升级到JeecgBoot 3.6.0或更高版本
  2. 参数过滤:

    • 实现白名单机制,只允许特定的表和字段名
    • 对用户输入进行严格的过滤和转义
  3. 使用预编译语句:

    • 使用参数化查询或ORM框架,避免直接拼接SQL
  4. 错误处理:

    • 自定义错误信息,避免暴露数据库结构

代码层面修复

// 示例修复代码(伪代码)
public Result queryFilterTableDictInfo(
    @RequestParam String table, 
    @RequestParam String text,
    @RequestParam String code,
    HttpServletRequest request) {
    
    // 1. 表名白名单校验
    if(!isAllowedTable(table)) {
        return Result.error("非法表名");
    }
    
    // 2. 字段名白名单校验
    if(!isAllowedColumn(text) || !isAllowedColumn(code)) {
        return Result.error("非法字段名");
    }
    
    // 3. 使用参数化查询
    String sql = "SELECT " + text + ", " + code + " FROM " + table;
    if(StringUtils.isNotBlank(filterSql)) {
        // 对filterSql进行严格过滤
        sql += " WHERE " + filterSql;
    }
    
    // 使用预编译语句执行查询
    // ...
}

安全防护最佳实践

  1. 最小权限原则:

    • 数据库连接使用最小必要权限账户
  2. 输入验证:

    • 对所有用户输入进行严格验证
  3. 输出编码:

    • 对输出到前端的数据进行编码处理
  4. 安全审计:

    • 定期进行代码安全审计
    • 使用自动化工具扫描漏洞
  5. 日志监控:

    • 记录可疑的数据库查询行为
    • 设置异常操作告警

总结

该SQL注入漏洞危害严重,可导致系统敏感数据完全泄露。建议所有使用JeecgBoot框架的用户立即检查版本并采取相应防护措施。对于无法立即升级的系统,应至少实施临时缓解方案,并尽快安排升级计划。

JeecgBoot SQL注入漏洞分析与防护指南 漏洞概述 JeecgBoot框架在3.6.0以下版本中存在一个严重的SQL注入漏洞,位于 /sys/api/queryFilterTableDictInfo 接口。攻击者可以利用此漏洞直接查询数据库中的任意表数据,导致敏感信息泄露。 漏洞详情 漏洞接口 /sys/api/queryFilterTableDictInfo 漏洞参数 table : 指定要查询的表名 text : 指定要查询的字段名(作为显示文本) code : 指定要查询的字段名(作为值) filterSql : 过滤条件(可选) pageSize : 每页记录数 pageNo : 页码 漏洞原理 前端用户可控参数 table 、 text 和 code 未经充分过滤直接拼接到SQL查询中,导致攻击者可以构造恶意参数查询任意表数据。 漏洞复现步骤 获取有效Token : 首先需要获取一个有效的用户认证Token(通过正常登录或其他方式) 构造恶意请求 : 携带有效Token访问上述URL 结果分析 : 成功响应将返回 sys_user 表中的所有用户名和密码 通过修改 table 参数可以查询其他表数据 错误响应可能暴露数据库结构信息(如库名 onenext_init ) 漏洞影响 数据泄露 : 可以获取用户凭证(用户名和密码) 可以查询业务敏感数据(如示例中的 tax_task 表) 可以获取数据库元信息 系统危害 : 完全数据库信息泄露 可能导致进一步权限提升 可能引发数据篡改风险 漏洞利用前提 获取有效的用户Token 目标系统使用JeecgBoot 3.6.0以下版本 漏洞接口未被禁用或加固 修复建议 临时缓解措施 禁用漏洞接口 : 在应用层禁用 /sys/api/queryFilterTableDictInfo 接口的访问 访问控制 : 对接口增加严格的权限控制 限制可查询的表和字段范围 长期解决方案 升级框架 : 升级到JeecgBoot 3.6.0或更高版本 参数过滤 : 实现白名单机制,只允许特定的表和字段名 对用户输入进行严格的过滤和转义 使用预编译语句 : 使用参数化查询或ORM框架,避免直接拼接SQL 错误处理 : 自定义错误信息,避免暴露数据库结构 代码层面修复 安全防护最佳实践 最小权限原则 : 数据库连接使用最小必要权限账户 输入验证 : 对所有用户输入进行严格验证 输出编码 : 对输出到前端的数据进行编码处理 安全审计 : 定期进行代码安全审计 使用自动化工具扫描漏洞 日志监控 : 记录可疑的数据库查询行为 设置异常操作告警 总结 该SQL注入漏洞危害严重,可导致系统敏感数据完全泄露。建议所有使用JeecgBoot框架的用户立即检查版本并采取相应防护措施。对于无法立即升级的系统,应至少实施临时缓解方案,并尽快安排升级计划。