帆软报表 v8.0 任意文件读取漏洞 CNVD-2018-04757
漏洞描述
FineReport报表软件是一款纯Java编写的,集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具。
FineReport v8.0版本存在任意文件读取漏洞,攻击者可利用漏洞读取网站任意文件。
漏洞影响
FineReport < v8.0
FOFA
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写出的解密代码为
这里使用上面讲述的原理进行复现,访问目标

路径分为两种
/WebReport/ReportServer
ReportServer
访问POC为,读取密码文件 privilege.xml

使用解密脚本解密文件

得到密码,即可登陆后台系统,账户为 admin

漏洞利用POC

Goby & POC
已上传 https://github.com/PeiQi0/PeiQi-WIKI-POC Goby & POC 目录中
FineReportv8.0_Arbitrary_file_read

Last updated
Was this helpful?