帆软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表达式语言。
两种攻击路径:
- 构建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及之前受影响版本
修复建议
建议用户升级到官方最新版本,并对参数处理逻辑进行安全加固。
注:本文档仅用于安全研究和教学目的,请勿用于非法用途。