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
漏洞成因
- 参数未过滤:系统在处理
text、code、table三个参数时未进行任何过滤操作 - 直接拼接SQL:系统使用
${}方式直接拼接SQL语句,而非使用预编译语句 - 多层调用未校验:从Controller层到Mapper层的调用链中均未对参数进行安全校验
漏洞调用链
- Controller层:
getDictItems/{dictCode}接口接收参数 - Service层:调用
queryTableDictItemsByCode()方法 - Mapper层:最终执行拼接的SQL语句
关键代码分析
- 参数接收点:
// 伪代码示例
@GetMapping("/getDictItems/{dictCode}")
public Result<?> getDictItems(
@PathVariable String dictCode,
@RequestParam String text,
@RequestParam String code,
@RequestParam String table) {
// 直接传递参数,未做过滤
return service.queryTableDictItemsByCode(text, code, table);
}
- SQL拼接点:
<!-- MyBatis映射文件示例 -->
<select id="queryTableDictItemsByCode" resultType="map">
SELECT ${code} as "value", ${text} as "text" FROM ${table}
</select>
漏洞复现
复现步骤
- 构造恶意请求:
http://localhost:8088/system/dictData/getDictItems/sys_user?text=user()&code=1&table=1
- 或使用以下Payload:
http://localhost:8088/system/dictData/getDictItems/sys_user,user(),1
复现效果
该请求将导致数据库执行包含user()函数的SQL查询,可能返回数据库用户信息或其他敏感数据。
修复建议
- 参数过滤:对所有传入参数进行严格的过滤和校验
- 使用预编译:将
${}替换为#{}使用预编译语句 - 最小权限原则:数据库连接使用最小必要权限账户
- 输入验证:对
text、code、table参数进行白名单验证
修复代码示例
<!-- 修复后的MyBatis映射文件 -->
<select id="queryTableDictItemsByCode" resultType="map">
SELECT #{code} as "value", #{text} as "text" FROM #{table}
</select>
总结
该漏洞属于典型的SQL注入漏洞,由于未对用户输入进行有效过滤且直接拼接SQL语句导致。开发人员应避免直接拼接SQL语句,始终使用参数化查询或ORM框架提供的安全查询方式。