Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

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

mongobleed-detector

MongoBleed 漏洞利用检测脚本

查看仓库
8113149个月前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 包

安装依赖

# 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

安装

# 克隆仓库
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 主机采集数据,并按以下结构组织:

./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

采集日志

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

采集断言计数

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

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/)
# 复制 FTDC 文件(可能需要 sudo)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/

步骤 2:运行分析

# 自动发现模式 - 分析所有可用数据
./mongobleed-detector.sh --data-dir ./collected-data/

# 使用自定义阈值
./mongobleed-detector.sh --data-dir ./collected-data/ \
    -t 1440 \              # 24 小时回看窗口
    -c 50 \                # 更低的连接阈值
    --spike-threshold 50   # 更低的激增阈值

传统模式(仅日志)

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

# 扫描默认路径
./mongobleed-detector.sh

# 扫描特定日志文件
./mongobleed-detector.sh -p /path/to/logs/*.json

# 取证模式(分析多台主机)
./mongobleed-detector.sh --forensic-dir /evidence/

模式 2:远程采集

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

# 创建主机列表文件
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/

远程扫描器选项

# 使用指定的 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连接数 < 阈值

输出示例

INFO: Auto-discovery mode: analyzing ./collected-data/
INFO: Module A: Analyzing 3 log file(s)...
INFO: Module B1: Analyzing assert-counts...
下载工具