Pear Admin Boot2.0.2-后台getDictItems/sys_user接口SQL注入(CVE-2024-6241)
字数 870 2025-08-22 12:23:06

Pear Admin Boot 2.0.2 SQL注入漏洞(CVE-2024-6241)分析报告

漏洞概述

Pear Admin Boot 2.0.2版本中存在SQL注入漏洞(CVE-2024-6241),攻击者可通过构造特定请求利用后台getDictItems/sys_user接口实现数据库查询操作,导致敏感信息泄露。

受影响版本

Pear Admin Boot 2.0.2及之前版本

漏洞分析

漏洞位置

漏洞存在于getDictItems/{dictCode}接口中,具体路径为:
/system/dictData/getDictItems/sys_user

漏洞成因

  1. 参数未过滤:系统在处理textcodetable三个参数时未进行任何过滤操作
  2. 直接拼接SQL:系统使用${}方式直接拼接SQL语句,而非使用预编译语句
  3. 多层调用未校验:从Controller层到Mapper层的调用链中均未对参数进行安全校验

漏洞调用链

  1. Controller层getDictItems/{dictCode}接口接收参数
  2. Service层:调用queryTableDictItemsByCode()方法
  3. Mapper层:最终执行拼接的SQL语句

关键代码分析

  1. 参数接收点
// 伪代码示例
@GetMapping("/getDictItems/{dictCode}")
public Result<?> getDictItems(
    @PathVariable String dictCode,
    @RequestParam String text,
    @RequestParam String code,
    @RequestParam String table) {
    // 直接传递参数,未做过滤
    return service.queryTableDictItemsByCode(text, code, table);
}
  1. SQL拼接点
<!-- MyBatis映射文件示例 -->
<select id="queryTableDictItemsByCode" resultType="map">
    SELECT ${code} as "value", ${text} as "text" FROM ${table}
</select>

漏洞复现

复现步骤

  1. 构造恶意请求:
http://localhost:8088/system/dictData/getDictItems/sys_user?text=user()&code=1&table=1
  1. 或使用以下Payload:
http://localhost:8088/system/dictData/getDictItems/sys_user,user(),1

复现效果

该请求将导致数据库执行包含user()函数的SQL查询,可能返回数据库用户信息或其他敏感数据。

修复建议

  1. 参数过滤:对所有传入参数进行严格的过滤和校验
  2. 使用预编译:将${}替换为#{}使用预编译语句
  3. 最小权限原则:数据库连接使用最小必要权限账户
  4. 输入验证:对textcodetable参数进行白名单验证

修复代码示例

<!-- 修复后的MyBatis映射文件 -->
<select id="queryTableDictItemsByCode" resultType="map">
    SELECT #{code} as "value", #{text} as "text" FROM #{table}
</select>

总结

该漏洞属于典型的SQL注入漏洞,由于未对用户输入进行有效过滤且直接拼接SQL语句导致。开发人员应避免直接拼接SQL语句,始终使用参数化查询或ORM框架提供的安全查询方式。

Pear Admin Boot 2.0.2 SQL注入漏洞(CVE-2024-6241)分析报告 漏洞概述 Pear Admin Boot 2.0.2版本中存在SQL注入漏洞(CVE-2024-6241),攻击者可通过构造特定请求利用后台 getDictItems/sys_user 接口实现数据库查询操作,导致敏感信息泄露。 受影响版本 Pear Admin Boot 2.0.2及之前版本 漏洞分析 漏洞位置 漏洞存在于 getDictItems/{dictCode} 接口中,具体路径为: /system/dictData/getDictItems/sys_user 漏洞成因 参数未过滤 :系统在处理 text 、 code 、 table 三个参数时未进行任何过滤操作 直接拼接SQL :系统使用 ${} 方式直接拼接SQL语句,而非使用预编译语句 多层调用未校验 :从Controller层到Mapper层的调用链中均未对参数进行安全校验 漏洞调用链 Controller层 : getDictItems/{dictCode} 接口接收参数 Service层 :调用 queryTableDictItemsByCode() 方法 Mapper层 :最终执行拼接的SQL语句 关键代码分析 参数接收点 : SQL拼接点 : 漏洞复现 复现步骤 构造恶意请求: 或使用以下Payload: 复现效果 该请求将导致数据库执行包含 user() 函数的SQL查询,可能返回数据库用户信息或其他敏感数据。 修复建议 参数过滤 :对所有传入参数进行严格的过滤和校验 使用预编译 :将 ${} 替换为 #{} 使用预编译语句 最小权限原则 :数据库连接使用最小必要权限账户 输入验证 :对 text 、 code 、 table 参数进行白名单验证 修复代码示例 总结 该漏洞属于典型的SQL注入漏洞,由于未对用户输入进行有效过滤且直接拼接SQL语句导致。开发人员应避免直接拼接SQL语句,始终使用参数化查询或ORM框架提供的安全查询方式。