SmartBI 权限绕过&RCE
type
status
date
slug
summary
tags
category
icon
password
漏洞描述
Smartbi是广州思迈特软件有限公司旗下的商业智能BI和数据分析品牌,为企业客户提供一站式商业智能解决方案。Smartbi大数据分析产品融合BI定义的所有阶段,对接各种业务数据库、数据仓库和大数据分析平台,进行加工处理、分析挖掘和可视化展现;满足所有用户的各种数据分析应用需求,如大数据分析、可视化分析、探索式分析、复杂报表、应用分享等等。
环境安装
安装完的默认账号如下:
demo/demo
admin/manager
数据库账号密码
admin/admin
配置调试参数:

代码分析
权限绕过
漏洞的关键代码如下:
smartbi.module.socialcontactshare.SocialContactShareService#isPublicShareResourceByShareType其中
sharetype默认为空
然后跟进
smartbi.module.socialcontactshare.SocialContactShareService#isPublicShareResourceByShareType,如下:记住
shareRecord默认为空,因为 sharetype默认为空
所以会走如下这个代码:
经过调试,代码功能是去
ShareRecord表里面查找是否有传入的 relateid,如果存在,则将查询到的内容赋值给 shareRecord
查询语句如下:
ShareRecord表内容如下:
resid默认有如下值:如果
resid的值没有等于上面的这些的话, shareRecord 因为默认为 null,然后 smartbi.module.socialcontactshare.SocialContactShareService#isPublicShareResourceByShareType返回为 false
在里面的话回继续判断
publicshared是不是等于1在表里查询可知,只有如下这两个
resid的publicshared等于1
最后
返回true

然后中间大量的一些if判断是否登陆之类的,最后来到下面这个代码,使用公共账号登陆然后返回Session,达到权限绕过的目的
RCE
smartbix.smartbi.metricsmodel.MetricsModelForVModule#checkExpression
这个方法直接调用js引擎执行了传入的表达式其中
smartbi.framework.rmi.RMIServlet类
调用
smartbi.framework.rmi.RMIServlet#processExecute
smartbi.framework.rmi.ClientService#executeInternal方法可以调用执行任意方法:
这里详细分析参考:
最终的POC如下:
漏洞复现



Loading...