SmartBI 权限绕过&RCE

type
status
date
slug
summary
tags
category
icon
password

漏洞描述

Smartbi是广州思迈特软件有限公司旗下的商业智能BI和数据分析品牌,为企业客户提供一站式商业智能解决方案。Smartbi大数据分析产品融合BI定义的所有阶段,对接各种业务数据库、数据仓库和大数据分析平台,进行加工处理、分析挖掘和可视化展现;满足所有用户的各种数据分析应用需求,如大数据分析、可视化分析、探索式分析、复杂报表、应用分享等等。

环境安装

安装完的默认账号如下: demo/demo admin/manager 数据库账号密码 admin/admin 配置调试参数:
notion image

代码分析

权限绕过

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

RCE

smartbix.smartbi.metricsmodel.MetricsModelForVModule#checkExpression 这个方法直接调用js引擎执行了传入的表达式
其中smartbi.framework.rmi.RMIServlet
notion image
调用 smartbi.framework.rmi.RMIServlet#processExecute
notion image
smartbi.framework.rmi.ClientService#executeInternal方法可以调用执行任意方法:
notion image
这里详细分析参考:
最终的POC如下:

漏洞复现

notion image
notion image
notion image
Loading...

© thestar 2021-2025