帆软FineReport export_excel SQL注入漏洞

环境搭建:

双击安装V11 版本,输入申请的激活码:05627014-b2c87aec1-85b3-bdc4fd925c5d

下载地址:https://pan.baidu.com/s/1eyqzpZMeY_2a-ji0JVv60Q 提取码: ph8r

漏洞调试可修改 bin/designer.bat 文件,添加 JVM 调试参数,保存后重启 FineReport

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

访问 http://ip:8075/webroot/decision

漏洞分析:

根据漏洞描述查找包含 /export/excel 的路由

com.fr.nx.app.web.controller.NXController#largedsExcelExportV9

继续跟进 com.fr.web.controller.AbstractRequestService#handle -> com.fr.nx.app.direct.AbstractExportHandler#handleRequest -> com.fr.nx.app.web.v9.handler.handler.largeds.LargeDatasetExcelExportHandler#doHandle,此处会调用 this.initCreator 初始化 WorkbookDataCreator(Excel创建工作器)

继续跟进,从HTTP请求中获取参数 parameters 参数,调用 this.getEntity 从请求中解析导出配置实体,然后调用 this.dealParam 方法处理导出参数

com.fr.nx.app.web.v9.handler.handler.largeds.LargeDatasetExcelExportHandler#initCreator

this.getEntity 方法会获取请求头 params 的值并解析为 LargeDatasetExcelExportJavaScript 对象

com.fr.nx.app.web.v9.handler.handler.largeds.LargeDatasetExcelExportHandler#getEntity

继续跟进 this.dealParam 方法,调用 ParameterProvider[] var9 = var3.getParameters(); 从XML配置中获取参数数组并进行一系列处理,当满足参数值是Formula 类型时会调用 evalValue 方法

com.fr.nx.app.web.v9.handler.handler.largeds.LargeDatasetExcelExportHandler#dealParam

evalValue(com.fr.script.Calculator#evalValue)方法会调用 parse 使用 ANTLR 生成的词法分析器(FRLexer)和语法解析器(FRParser)将字符串解析成结构化的抽象语法树(AST),可以调用 SQL 函数执行恶意的命令

漏洞复现: