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

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

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

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

工具目录

分类

查看所有分类
Loading categories
mongobleed-detector — MongoBleed 漏洞利用检测脚本 | Kitploit
工具/GitHubGitHub/neo23x0/mongobleed-detector
漏洞分析脚本与自动化取证分析数字取证威胁情报事件响应数据库安全日志分析
GitHubneo23x0/mongobleed-detector

mongobleed-detector

MongoBleed 漏洞利用检测脚本

查看仓库
811338个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

MongoBleed 检测器

用于 CVE-2025-14847(MongoBleed)的离线 MongoDB 分析工具

一款独立的 Linux 命令行工具,通过多种检测模块分析 MongoDB 数据,以识别可能存在的 CVE-2025-14847 漏洞利用行为。

目录

  • 概述
  • 检测模块
  • 环境要求
  • 安装
  • 两种运行模式
  • 模式 1:本地分析
  • 模式 2:远程采集
  • 命令行选项
  • 置信度等级
  • 输出示例
  • 测试
  • 注意事项与局限
  • 参考与致谢
  • 许可证

概述

MongoBleed(CVE-2025-14847)是 MongoDB zlib 解压过程中的一个内存泄露漏洞,攻击者无需认证即可直接从服务器内存中提取敏感数据——包括凭据、会话令牌、PII(个人身份信息)。

本工具可帮助应急响应人员利用多种证据来源检测漏洞利用尝试:

  • 模块 A:日志关联分析(连接事件、元数据缺失)
  • 模块 B1:断言计数分析(serverStatus.asserts 快照)
  • 模块 B2:FTDC 峰值检测(diagnostic.data 时间序列)

主要特性

  • 多模块检测 - 关联多个数据来源以获得更高置信度
  • 离线且无需代理 - 分析过程中无需网络连接
  • 自动发现 - 自动检测可用的数据来源
  • 远程采集 - 通过 SSH 从多台主机采集数据
  • 组合评分 - 输出 HIGH/MEDIUM/LOW 置信度判定
  • 流式处理 - 高效处理大型日志文件
  • 检测模块

    模块 A:日志关联分析

    分析 MongoDB JSON 日志以检测漏洞利用模式:

    事件 ID类型描述
    22943连接已接受客户端连接时记录
    51800客户端元数据客户端发送驱动/应用信息时记录
    22944连接已关闭客户端断开连接时记录

    关键洞察:合法的 MongoDB 驱动总会发送客户端元数据。而 MongoBleed 漏洞利用程序连接、提取内存、然后断开——但从不发送元数据。

    模块 B1:断言计数

    分析 db.serverStatus().asserts 的快照,以检测 asserts.user 计数器中的异常模式:

    • 多快照对比:对一段时间内的快照进行比较,检测用户断言数的突然激增
    • 单一快照启发式判断:当仅有一个快照可用时,通过将 asserts.user 与其他断言类型进行比较来检测可疑模式。如果用户断言数异常偏高(比值 ≥250 倍)或所有其他类型均为零,则标记为可疑(MEDIUM 置信度)

    注意:累积计数器可能产生误报。请与 FTDC(模块 B2)结合使用以获得最佳效果。

    模块 B2:FTDC 峰值检测

    分析 MongoDB 的全时诊断数据采集(FTDC)文件,以检测断言计数器在时间维度上的局部激增。FTDC 会周期性采样 serverStatus,从而能够精确定位潜在攻击的发生时间。

    环境要求

    Shell 脚本(mongobleed-detector.sh)

    • Linux 或 macOS(bash 4+)
    • jq - JSON 处理器
    • awk(建议使用 gawk)
    • gzip - 用于支持压缩日志

    Python 组件(可选,用于 FTDC 解码)

    • Python 3.8+
    • pymongo - 用于 FTDC 文件解码

    远程扫描器(mongobleed-remote.py)

    • Python 3.8+
    • 原生 SSH 客户端(ssh、scp 命令)
    • 基本操作无需额外 Python 包

    安装依赖

    root@kitploit:~
    # Shell 脚本依赖
    # Debian/Ubuntu
    apt-get install jq gawk gzip
    
    # RHEL/CentOS/Fedora
    dnf install jq gawk gzip
    
    # macOS
    brew install jq gawk
    
    # Python 依赖(用于 FTDC 解码)
    pip install -r requirements.txt
    

    安装

    root@kitploit:~
    # 克隆仓库
    git clone https://github.com/your-org/mongobleed-detector.git
    cd mongobleed-detector
    
    # 赋予脚本可执行权限
    chmod +x mongobleed-detector.sh
    chmod +x mongobleed-remote.py
    chmod +x ftdc-decode.py
    
    # 安装 Python 依赖(可选,用于 FTDC 支持)
    pip install -r requirements.txt
    

    两种运行模式

    模式 1:本地分析

    分析从 MongoDB 主机手动采集的数据。

    模式 2:远程采集

    通过 SSH 自动从多台主机采集数据,然后在本地进行分析。

    模式 1:本地分析

    步骤 1:采集数据

    从 MongoDB 主机采集数据,并按以下结构组织:

    root@kitploit:~
    ./collected-data/
    ├── logs/                    # MongoDB JSON 日志
    │   ├── mongod.log
    │   ├── mongod.log.1
    │   └── mongod.log.2.gz
    ├── assert-counts/           # serverStatus().asserts 快照
    │   ├── asserts-2025-01-01.json
    │   └── asserts-2025-01-02.json
    └── ftdc-files/              # FTDC diagnostic.data 内容
        ├── metrics.2025-01-02T10-00-00Z-00000
        └── metrics.interim
    

    采集日志

    root@kitploit:~
    # 从远程主机复制
    scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/
    

    采集断言计数

    在 MongoDB 主机上运行以下命令(需要 mongosh 访问权限):

    root@kitploit:~
    mongosh --quiet --eval 'JSON.stringify({
      timestamp: new Date().toISOString(),
      hostname: db.hostInfo().system.hostname,
      asserts: db.serverStatus().asserts,
      uptime: db.serverStatus().uptime
    })' > asserts-$(date +%Y%m%d-%H%M%S).json
    

    将生成的 JSON 文件复制到 ./collected-data/assert-counts/。

    提示:多次运行此命令(例如每小时一次),以建立基线并检测激增。

    采集 FTDC 文件

    FTDC 文件位于:

    • mongod:<storage.dbPath>/diagnostic.data/(通常为 /var/lib/mongodb/diagnostic.data/)
    • mongos:由 systemLog.path 推导得出(例如 /var/log/mongodb/mongos.diagnostic.data/)
    root@kitploit:~
    # 复制 FTDC 文件(可能需要 sudo)
    sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/
    

    步骤 2:运行分析

    root@kitploit:~
    # 自动发现模式 - 分析所有可用数据
    ./mongobleed-detector.sh --data-dir ./collected-data/
    
    # 使用自定义阈值
    ./mongobleed-detector.sh --data-dir ./collected-data/ \
        -t 1440 \              # 24 小时回看窗口
        -c 50 \                # 更低的连接阈值
        --spike-threshold 50   # 更低的激增阈值
    

    传统模式(仅日志)

    为保持向后兼容,您仍可直接分析日志:

    root@kitploit:~
    # 扫描默认路径
    ./mongobleed-detector.sh
    
    # 扫描特定日志文件
    ./mongobleed-detector.sh -p /path/to/logs/*.json
    
    # 取证模式(分析多台主机)
    ./mongobleed-detector.sh --forensic-dir /evidence/
    

    模式 2:远程采集

    自动从多台主机采集数据并进行分析:

    root@kitploit:~
    # 创建主机列表文件
    cat > hosts.txt << EOF
    mongo-prod-01.example.com
    mongo-prod-02.example.com
    mongo-staging.example.com
    EOF
    
    # 采集并分析
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/
    

    远程扫描器选项

    root@kitploit:~
    # 使用指定的 SSH 密钥
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key
    
    # 并行执行
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin --parallel 10
    
    # 跳过 FTDC 采集(更快)
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin --skip-ftdc
    
    # 仅采集,稍后分析
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin --collect-only
    
    # 传递 SSH 选项(例如跳板主机)
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin \
        -o "ProxyJump=bastion.example.com"
    
    # 使用 sudo 访问受权限保护的文件(FTDC 文件通常受限)
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin --sudo
    
    # 调试模式,排查连接问题
    ./mongobleed-remote.py --hosts-file hosts.txt --user admin --debug
    

    关于 FTDC 权限的说明:/var/lib/mongodb/diagnostic.data/ 中的 FTDC 文件通常归 mongodb 用户所有,普通用户无法读取。如果看到 "FTDC Permission Issues" 警告,请使用 --sudo 标志。这要求远程用户具有免密码 sudo 访问权限(在 sudoers 中配置 NOPASSWD)。

    采集内容

    数据类型来源目标位置
    日志/var/log/mongodb/mongod.log*<输出目录>/<主机名>/logs/
    断言计数mongosh 命令<输出目录>/<主机名>/assert-counts/
    FTDC 文件/var/lib/mongodb/diagnostic.data/metrics.*<输出目录>/<主机名>/ftdc-files/

    命令行选项

    mongobleed-detector.sh

    选项描述默认值
    -d, --data-dir <path>已采集数据的目录(自动发现模式)-
    -p, --path <glob>额外的日志路径/通配符(可重复)-
    -t, --time <minutes>回看窗口(分钟)4320(3 天)
    -c, --conn-threshold连接数阈值100
    -b, --burst-threshold每分钟突发速率阈值400
    -m, --metadata-rate元数据率阈值(0.0-1.0)0.10
    --spike-threshold断言激增阈值100
    --user-ratio-threshold单一快照检测的用户/其他断言比值阈值250
    --no-default-paths跳过默认日志路径false
    --forensic-dir <path>将子目录作为独立主机进行分析-

    mongobleed-remote.py

    选项描述默认值
    -H, --host <hostname>要扫描的远程主机(可重复)-
    -f, --hosts-file <file>包含主机名的文件(每行一个)-
    -u, --user <user>SSH 用户名当前用户
    -k, --key <file>SSH 私钥文件ssh-agent
    -P, --port <port>SSH 端口22
    -o, --ssh-options <opt>额外的 SSH 选项(可重复)-
    --sudo使用 sudo 访问受权限保护的文件(FTDC)false
    -O, --output-dir <path>存放采集数据的目录./collected-data
    --log-path <path>要采集的远程日志路径(可重复)标准路径
    --ftdc-path <path>远程 FTDC 目录路径(可重复)标准路径
    --skip-logs跳过日志采集false
    --skip-asserts跳过 serverStatus().asserts 采集false
    --skip-ftdc跳过 FTDC 文件采集false
    --collect-only仅采集数据,不运行分析false
    -j, --parallel <n>并行连接数5
    --timeout <seconds>SSH 命令超时时间300
    -d, --debug启用调试输出(显示 SSH 命令)false
    -q, --quiet抑制进度消息false

    退出码

    代码含义
    0未发现 HIGH 或 MEDIUM 级别结果
    1检测到 HIGH 或 MEDIUM 级别结果
    2错误(缺少依赖、无数据等)

    置信度等级

    该工具根据所有可用证据提供综合置信度判定:

    置信度判定标准解释
    HIGH检测到 FTDC 峰值 且 同一时间窗口内存在可疑日志漏洞利用的强有力指标
    MEDIUM检测到 FTDC 峰值 或 存在可疑日志(但未关联)建议开展调查
    LOW仅有累积断言计数,无激增检测到异常,证据较弱
    INFO未发现显著结果活动正常

    各模块风险等级

    对于日志关联分析(模块 A),各个 IP 被分类为:

    风险判定标准
    HIGH连接数 ≥ 阈值,元数据率 < 10%,突发速率 ≥ 400/分钟
    MEDIUM连接数 ≥ 阈值,元数据率 < 10%,突发速率 < 400/分钟
    LOW连接数 ≥ 阈值,元数据率 ≥ 10%
    INFO连接数 < 阈值

    输出示例

    root@kitploit:~
    INFO: Auto-discovery mode: analyzing ./collected-data/
    INFO: Module A: Analyzing 3 log file(s)...
    INFO: Module B1: Analyzing assert-counts...
    
    ╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
    ║                              MongoBleed (CVE-2025-14847) Detection Results                                       ║
    ╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
    
    Module Status:
      [✓] Module A (Log Correlation): 3 log file(s) found
      [✓] Module B1 (Assert Counts): 4 snapshot(s) found
      [−] Module B2 (FTDC Spikes): No FTDC files or decoder unavailable
    
    Analysis Parameters:
      Time Window:        4320 minutes
      Connection Thresh:  100
      Burst Rate Thresh:  400/min
      Metadata Rate:      0.10
      Spike Threshold:    100
      User Ratio Thresh:  250x
    
    Module A - Log Correlation Findings:
    
    Risk     SourceIP                                  ConnCount  MetaCount  DiscCount    MetaRate%    BurstRate/m FirstSeen (UTC)        LastSeen (UTC)        
    -------- ---------------------------------------- ---------- ---------- ---------- ------------ -------------- ---------------------- ----------------------
    HIGH     137.137.137.137                                8172          0       8172        0.00%         490.32 2025-12-27T12:55:52Z   2025-12-27T13:12:32Z  
    
    Module B1 - Assert Counts Analysis:
      Analyzed 4 snapshots from 2025-01-01T10:00:00Z to 2025-01-01T11:30:00Z
        asserts.user: 100 -> 860 (delta: 760)
      SPIKE DETECTED: 2025-01-01T10:30:00Z to 2025-01-01T11:00:00Z
        Delta: +740 user asserts (110 -> 850)
    
    ═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
    Combined Verdict:
      MEDIUM CONFIDENCE - Investigation recommended
        - Suspicious connection patterns but FTDC data unavailable for correlation
    
    ⚠ IMPORTANT: If exploitation is confirmed, patching alone is insufficient.
      - Rotate all credentials that may have been exposed
      - Review accessed data for sensitive information disclosure
      - Check for lateral movement from affected systems
      - Preserve logs for forensic analysis
    
    Caveats:
      - Connection metadata absence is PoC-specific and can be evaded
      - Assertion counters are cumulative - false positives possible without baseline
      - FTDC provides timing but not perfect attribution
      - Patch + rotate secrets remains mandatory regardless of detection results
    

    测试

    本仓库包含一套测试套件,用于验证检测器。

    真实世界示例数据

    example-data/ 目录包含来自一台遭受 MongoBleed PoC 攻击的 MongoDB 8.0.16 实例的真实数据:

    root@kitploit:~
    example-data/
    ├── logs/                    # 包含攻击模式的真实 MongoDB 日志
    │   ├── mongod.log
    │   └── mongod.log.1.gz
    ├── assert-counts/           # 攻击后的 serverStatus().asserts 快照
    │   └── asserts-post-attack.json
    └── ftdc-files/              # 真实 FTDC 诊断数据文件
        └── metrics.*
    

    这些数据显示:

    • 来自攻击者 IP 137.137.137.137 的 16,344 个连接,元数据率为 0%
    • 攻击期间累积的 37,384 个用户断言
    • 覆盖攻击时间窗口的 FTDC 文件

    生成合成测试数据

    root@kitploit:~
    ./test/generate-test-logs.sh
    

    这会创建包含各种模式的额外合成测试数据:

    • 包含 HIGH/MEDIUM/LOW/INFO 风险模式的日志文件
    • 断言计数 JSON 快照(含激增和不含激增)
    • 边界情况(IPv6、畸形输入等)

    运行测试

    root@kitploit:~
    ./test/test-detector.sh
    

    预期输出:

    root@kitploit:~
    ╔════════════════════════════════════════════════════════╗
    ║       MongoBleed Detector Test Suite                   ║
    ╚════════════════════════════════════════════════════════╝
    
    Module A Tests (Log Correlation):
    ✓ PASS: Exit code is 1 (findings detected)
    ✓ PASS: Detected source IP 137.137.137.137
    ...
    
    Module B1 Tests (Assert Counts):
    ✓ PASS: Shows Module B1 status
    ✓ PASS: Detected assert spike
    ...
    
    Auto-Discovery Mode Tests:
    ✓ PASS: Shows Module A status
    ✓ PASS: Shows combined verdict
    ...
    
    Results:
      Passed: 24
      Failed: 0
    
    All tests passed!
    

    注意事项与局限

    ⚠️ 重要局限

    检测局限

    1. 针对特定 PoC 的检测:元数据缺失检测基于已知 MongoBleed PoC 行为。老练的攻击者可能修改漏洞利用代码以发送伪造元数据,但这会降低利用速度。

    2. 累积计数器:asserts.user 自 mongod 重启以来是累积的。如果没有基线快照,较高的值对于长期运行的实例可能是正常的。随时间采集多个快照可显著提高准确性。

    3. FTDC 时间信息:FTDC 提供时间信息,但无法做到完美归因。请与日志关联分析结合使用以获得最佳效果。

    4. 日志保留:只能分析现存日志。激进的日志轮转或攻击者清除日志将销毁证据。

    技术要求

    1. 需要 JSON 日志:MongoDB 4.4+ 默认输出 JSON 日志。不支持传统文本日志。

    2. FTDC 解码器:FTDC 解码需要带 pymongo 的 Python 3。否则模块 B2 不可用。

    3. mongosh 访问权限:采集断言计数需要具有相应权限的 mongosh。

    检测后行动

    如果确认存在 HIGH 或 MEDIUM 级别发现:

    1. 保留证据 - 在日志轮转前进行复制
    2. 轮转凭据 - 轮转所有 MongoDB 凭据以及可能曾存在于内存中的任何机密信息
    3. 数据审查 - 评估可能暴露了哪些敏感数据
    4. 横向移动排查 - 检查攻击者是否向其他系统移动
    5. 立即修补 - 应用 MongoDB 安全更新
    6. 报告 - 遵循您的应急响应流程

    参考与致谢

    检测研究

    本工具的检测逻辑基于 Eric Capuano 和 Tamir Zimerman 的研究:

    • Hunting MongoBleed (CVE-2025-14847) - Eric Capuano 关于该漏洞及检测方法的文章
    • A Different MongoBleed Perspective - Tamir Zimerman 关于基于断言检测的分析

    MongoDB 文档

    • serverStatus Command - asserts 字段文档
    • Full Time Diagnostic Data Capture - FTDC 存储位置
    • What is MongoDB FTDC - FTDC 格式背景

    受影响版本

    版本受影响版本修复版本
    8.2.x8.2.0 - 8.2.28.2.3
    8.0.x8.0.0 - 8.0.168.0.17
    7.0.x7.0.0 - 7.0.277.0.28
    6.0.x6.0.0 - 6.0.266.0.27
    5.0.x5.0.0 - 5.0.315.0.32
    4.4.x4.4.0 - 4.4.294.4.30
    4.2.x4.2.0+无修复
    4.0.x4.0.0+无修复
    3.6.x3.6.0+无修复

    许可证

    参见 LICENSE 文件。

    贡献

    欢迎贡献!请提交 issue 和 pull request。

    如果您使用本工具对生产数据进行了测试,我们尤其希望获得以下方面的反馈:

    • 误报率
    • 合法流量模式
    • 边界情况或解析失败
    • FTDC 解码问题
    下载工具