SmartBI 权限绕过&RCE漏洞分析
type
status
date
slug
summary
tags
category
icon
password
AI summary
killer大哥公开详情了,我这儿也就不加密了。killer大哥太细节了,还分析了如何解密补丁。

环境搭建
通过安装包一键安装,在startup.cmd/sh添加远程调试的配置
然后运行运行startup即可
漏洞分析
权限绕过
在vision/share.jsp中,这里获取resid的值,在
shareService.isPublicShareResourceByShareType(resid, sharetype)
验证resid存在后,调用JSONObject result = shareService.getShareRestrictByShareType(resid, sharetype);
这里继续跟进
shareService.getShareRestrictByShareType()
因为
shareType
是空的,所以直接调用
this.shareRestrict(relateid, (String)null, (String)null, (String)null);


直接返回false,那么最终jsp的result变量的值就是false,无法进入if,直接调用
UserManagerModule.getInstance().autoLoginByPublicUser();
切换至Public用户并返回Session
也就是我们只有知道一个存在的resid即可获取合法Session。

最终可以定位到是从t_share_record中查询c_relateid的值

这里的5条都是安装后默认的
发送以下请求即可获取合法Session
补充坑点

这里需要为true才能进入if。但是在
smartbi/module/socialcontactshare/SocialContactShareService.class#isPublicShareResourceByShareType()

需要
publicshared
为1才行。所以只有96a0a9d0b86f90d5416d013f4cfe2f23
和b904ab9f5a84712a672523a7b4881ee4
可用
后台RCE
smartbix.smartbi.metricsmodel.MetricsModelForVModule#checkExpression()
这个方法直接调用js引擎执行了传入的表达式。
而SmartBI有一个
smartbi.framework.rmi.RMIServlet
可以通过smartbi.framework.rmi.ClientService#executeInternal
反射调用任何方法,具体分析见https://www.ch35tnut.com/zh-cn/vulnerability/smartbi-rce/,这里就不再阐述了。最终PoC

Loading...