帆软export/excelSQL注入漏洞分析
字数 1573 2025-12-19 12:05:32

帆软export/excel SQL注入漏洞分析教学文档

漏洞概述

本教学文档详细分析帆软报表(FineReport) export/excel功能中存在的SQL注入漏洞。该漏洞位于FineReport 11.0版本中,攻击者可通过精心构造的请求参数实现SQL注入攻击。

漏洞定位

路由接口位置

漏洞相关的接口位于fine-report-engine-11.0.jar中的com.fr.nx.app.web.controller包,该包定义了一系列Web路由接口。

关键处理类

主要漏洞点位于:com.fr.nx.app.web.v9.handler.handler.largeds.LargeDatasetExcelExportHandler#initCreator方法

参数解析机制

参数传递方式

该接口接受三种不同格式的参数,均可能成为注入点:

1. __parameters__参数

  • 格式: JSON格式
  • 传递方式: 通过GET请求或HTTP Header传递
  • 处理位置: 在LargeDatasetExcelExportJavaScript var7 = this.getEntity(var2)中被解析

2. params参数

  • 格式: XML格式
  • 特点: 需要构造特定的XML结构进行传递

3. functionParams参数

  • 格式: JSON格式
  • 处理方式: 通过this.dealParam方法处理

漏洞利用原理

表达式解析机制

FineReport使用FRParser作为核心表达式解析器,该解析器基于ANTLR生成的递归下降解析器来解析FineReport表达式语言。

两种攻击路径:

  1. 构建Formula对象:通过构造特定的Formula对象,进入var2.evalValue执行路径
  2. 使用占位符替换:不构建Formula对象,利用占位符替换机制进入第二个var2.evalValue执行路径

函数调用支持

FRParser支持com.fr.function包下的多种函数调用,这为攻击者提供了执行任意代码的可能性。

SQL注入实现

调用栈分析

攻击者通过精心构造的表达式,可以最终执行SQL语句。具体的调用栈展示了从参数解析到SQL执行的全过程。

SQL注入过滤机制

FineReport实施了以下安全防护措施:

1. 字符过滤

  • 移除特殊字符,防止基本的SQL注入

2. 关键词过滤

  • 通过正则表达式匹配SQL关键词进行过滤

漏洞利用进阶

SQLite Getshell可能性

在成功实现SQL注入后,攻击者可以进一步利用SQLite数据库的特性实现Getshell攻击。

攻击步骤复现

步骤1:参数构造

构造符合要求的三种参数格式,确保能够通过初步的格式验证。

步骤2:表达式注入

通过Formula对象或占位符方式注入恶意表达式,绕过初步的过滤机制。

步骤3:SQL语句执行

利用FRParser的表达式解析功能,最终实现任意SQL语句的执行。

防护建议

1. 输入验证

  • 对所有输入参数进行严格的格式验证
  • 对特殊字符进行转义处理

2. 权限控制

  • 限制数据库账户权限,避免过高权限执行SQL

3. 安全更新

  • 及时更新到官方修复版本
  • 定期进行安全补丁更新

技术要点总结

  1. 多参数入口:漏洞存在于三个不同的参数处理路径
  2. 表达式解析:利用FRParser的表达式解析功能实现注入
  3. 过滤绕过:通过特定构造可绕过字符和关键词过滤
  4. 链式利用:可从SQL注入进一步发展到Getshell攻击

影响版本

  • FineReport 11.0及之前受影响版本

修复建议

建议用户升级到官方最新版本,并对参数处理逻辑进行安全加固。


注:本文档仅用于安全研究和教学目的,请勿用于非法用途。

帆软export/excel SQL注入漏洞分析教学文档 漏洞概述 本教学文档详细分析帆软报表(FineReport) export/excel功能中存在的SQL注入漏洞。该漏洞位于FineReport 11.0版本中,攻击者可通过精心构造的请求参数实现SQL注入攻击。 漏洞定位 路由接口位置 漏洞相关的接口位于 fine-report-engine-11.0.jar 中的 com.fr.nx.app.web.controller 包,该包定义了一系列Web路由接口。 关键处理类 主要漏洞点位于: com.fr.nx.app.web.v9.handler.handler.largeds.LargeDatasetExcelExportHandler#initCreator 方法 参数解析机制 参数传递方式 该接口接受三种不同格式的参数,均可能成为注入点: 1. __ parameters__ 参数 格式 : JSON格式 传递方式 : 通过GET请求或HTTP Header传递 处理位置 : 在 LargeDatasetExcelExportJavaScript var7 = this.getEntity(var2) 中被解析 2. params参数 格式 : XML格式 特点 : 需要构造特定的XML结构进行传递 3. functionParams参数 格式 : JSON格式 处理方式 : 通过 this.dealParam 方法处理 漏洞利用原理 表达式解析机制 FineReport使用FRParser作为核心表达式解析器,该解析器基于ANTLR生成的递归下降解析器来解析FineReport表达式语言。 两种攻击路径: 构建Formula对象 :通过构造特定的Formula对象,进入 var2.evalValue 执行路径 使用占位符替换 :不构建Formula对象,利用占位符替换机制进入第二个 var2.evalValue 执行路径 函数调用支持 FRParser支持 com.fr.function 包下的多种函数调用,这为攻击者提供了执行任意代码的可能性。 SQL注入实现 调用栈分析 攻击者通过精心构造的表达式,可以最终执行SQL语句。具体的调用栈展示了从参数解析到SQL执行的全过程。 SQL注入过滤机制 FineReport实施了以下安全防护措施: 1. 字符过滤 移除特殊字符,防止基本的SQL注入 2. 关键词过滤 通过正则表达式匹配SQL关键词进行过滤 漏洞利用进阶 SQLite Getshell可能性 在成功实现SQL注入后,攻击者可以进一步利用SQLite数据库的特性实现Getshell攻击。 攻击步骤复现 步骤1:参数构造 构造符合要求的三种参数格式,确保能够通过初步的格式验证。 步骤2:表达式注入 通过Formula对象或占位符方式注入恶意表达式,绕过初步的过滤机制。 步骤3:SQL语句执行 利用FRParser的表达式解析功能,最终实现任意SQL语句的执行。 防护建议 1. 输入验证 对所有输入参数进行严格的格式验证 对特殊字符进行转义处理 2. 权限控制 限制数据库账户权限,避免过高权限执行SQL 3. 安全更新 及时更新到官方修复版本 定期进行安全补丁更新 技术要点总结 多参数入口 :漏洞存在于三个不同的参数处理路径 表达式解析 :利用FRParser的表达式解析功能实现注入 过滤绕过 :通过特定构造可绕过字符和关键词过滤 链式利用 :可从SQL注入进一步发展到Getshell攻击 影响版本 FineReport 11.0及之前受影响版本 修复建议 建议用户升级到官方最新版本,并对参数处理逻辑进行安全加固。 注:本文档仅用于安全研究和教学目的,请勿用于非法用途。