帆软(FineReport) V9任意文件覆盖漏洞

  • A+
所属分类:安全文章

帆软(FineReport) V9任意文件覆盖漏洞

漏洞简介

该漏洞是在近期HVV中被披露的,由于在初始化svg文件时,未对传入的参数做限制,导致可以对已存在的文件覆盖写入数据,从而通过将木马写入jsp文件中获取服务器权限。

影响范围

  • WebReport V9
    # 漏洞分析
    fr-chart-9.0.jar包中com.fr.chart.web/ChartSvgInitService类传递op参数的值svginit

    漏洞主要出现在fr-chart-9.0.jar包中com.fr.chart.web/ChartSaveSvgAction类,通过cmd参数传递design_save_svg命令,利用filePath参数传递需要初始化的svg文件,将filePath参数传入的字符串中chartmapsvg及后边的所有字符串拼接到WebReport目录下“WEB-INF/assets/”之后,如果生成的字符串中包含.svg就会创建该文件,然后将var7的内容写入创建的文件。如果不包含.svg就会递归创建该目录,即传入的是jsp等非svg文件就会创建目录无法写入数据,但如果是存在的jsp文件,就可以覆盖文件内容。整个过程直接进行字符串拼接,未过滤“../”因此可以利用路径穿越漏洞在任意可写位置创建文件或覆盖jsp文件内容。

    跟踪getInputStream方法可见,通过__CONTENT__参数传递文件内容即可:

    # 漏洞利用
    由于WebReport V9在安装之后在WebReport目录下存在update.jspupdate1.jsp,因此可以构造payload直接覆盖这两个文件的内容,从而GetShell。构造如下Payload覆盖update.jsp文件内容:

    访问update.jsp,成功覆盖内容:
    帆软(FineReport) V9任意文件覆盖漏洞
    将文件内容替换为冰蝎木马,需要将双引号转义:

    通过冰蝎成功连接服务器:
    帆软(FineReport) V9任意文件覆盖漏洞
    # 修复方法
    严格过滤filePath参数的值,或使用路径和文件后缀白名单,删除默认update.jsp和update1.jsp页面,升级FineReport到最新版。
    # 批量漏洞检测工具
    https://github.com/NHPT/WebReportV9Exp/


END

帆软(FineReport) V9任意文件覆盖漏洞


本文始发于微信公众号(网络侦查研究院):帆软(FineReport) V9任意文件覆盖漏洞

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: