freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

帆软(FineReport) V9任意文件覆盖漏洞
2021-06-08 19:46:21

漏洞简介

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

影响范围

WebReport V9

漏洞分析

fr-chart-9.0.jar包中com.fr.chart.web/ChartSvgInitService类传递op参数的值svginit:

1619679021_608a572d02f26658a25cd.png!small?1619679019297

漏洞主要出现在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__参数传递文件内容即可:

1619679883_608a5a8b43359cc7f08e1.png!small?1619679881686

漏洞利用

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

1619712755_608adaf3130f367e90a8d.png!small?1619712753069

访问update.jsp,成功覆盖内容:

1619712921_608adb990b0afe09cd86f.png!small?1619712918870

将文件内容替换为冰蝎木马,需要将双引号转义:

1619713132_608adc6cca395f35e92b4.png!small?1619713131085

通过冰蝎成功连接服务器,如图:

1619713974_608adfb6156e3403cce88.png!small?1619713971869

感谢先知社区评论区blackwolf提出的无损利用方法,让该漏洞成为任意文件上传,通过传递文件名为xxx.svg.jsp即可创建该文件并写入WebShell,如图:

1623152749_60bf586d4cb85a0513b05.jpg!small?1623152749053

访问该文件并执行命令,如图:

1623152770_60bf588290741a96ed612.jpg!small?1623152770356

修复方法

严格过滤filePath参数的值,或使用路径和文件后缀白名单,删除默认update.jsp和update1.jsp页面,升级FineReport到最新版。

批量漏洞检测工具

https://github.com/NHPT/WebReportV9Exp/

# 任意文件覆盖 # WebReport # 帆软V9GetShell # FineReport V9
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录