本篇文章是MongoDB数据库信息泄露漏洞复现,记录了实际中常见的MongoDB数据库未授权访问漏洞并如何使用,主要分为七个部分:MongoDB简介、MongoDB安装、MongoDB基本操作、MongoDB相关工具使用、MongoDB漏洞复现、MongoDB实战和MongoDB防御措施。
一、MongoDB基本介绍
MongoDB是一个高性能,开源,无模式的 文档型数据库 ,是一个基于分布式文件存储的数据库,由C++编写。其中的数据以JSON格式文档的形式存储。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是当前 NoSQL 数据库产品中最热门的一种。
MongoDB默认端口 :
27017:mongod和mongos实例的默认端口。
27018:设置–shardsvr运行变量或在配置文件里设置clusterRole为shardsvr时的默认端口
术语介绍:
SQL术语/概念 |
MongoDB术语/概念 |
解释/说明 |
database |
database |
数据库 |
table |
collection |
数据库表/集合 |
row |
document |
数据记录行/文档 |
column |
field |
数据字段/域 |
index |
index |
索引 |
Mongodb中每个数据库含有一个或多个集合collections(相当于table)
Mongodb中每个集合含有一个或多个文档document(相当于数据行)
文档Document是一组键值对,MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。文档简单例子:
{"username":"tom","password":"tom","email":"tom@gmail.com"}
MongoDB自带数据库:
admin: 从权限的角度来看,这是”root”数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
漏洞成因:
MongoDB 未配置访问认证授权 ,无需认证连接数据库后对数据库进行任意操作(未授权访问漏洞),存在严重的数据泄露风险。默认情况下MongoDB安装后,没有账 密码且未开启权限验证。但不同版本的监听地址不同,3.0之前版本默认监听在0.0.0.0,3.0及之后版本默认监听在127.0.0.1。
二、软件安装及环境搭建
1、MongoDB安装
MongoDB官 提供了32位、64位的预编译二进制包。选择最新版下载msi即可(截止到写这篇文章的时间,最新版本为4.4.5)
MongoDB下载地址:
https://www.mongodb.com/try/download/community
下载好后,拖进虚拟机,双击安装
1)选择安装类型
选择 Custom 自定义安装
2)修改MongoDB安装路径
3)服务配置
这里默认即可,Data Directory和Log Directory分别存放数据及日志文件信息
4)不勾选MongoDB Compass
在默认的安装下,该文件会自动安装。也可以不勾选 install MongoDB compass ,到官 上去安装。这里留到后面单独装。
等待片刻即可安装完成,遇到提示选择第一个即可。
2、MongoDB配置
bin目录结构
mongod.cfg 文件为Windows里的配置文件,在Linux中名字为 mongod.conf
设置允许远程连接
在 mongod.cfg 文件中将 bindIP 地址修改为 0.0.0.0 ,这样外部 IP 可以连接 MongoDB ,便于测试
# network interfacesnet:port: 27017bindIp: 0.0.0.0
配置环境变量
将 bin 目录配置进环境变量 C:MongoDBbin
测试是否配置成功,在cmd下直接输入mongo即可判断
配置文件启动
目的:将 mongodb 服务安装到 Windows 服务中,可以通过net命令进行开启和关闭
首先在 C:MongoDB 目录下创建一个 mongodb.conf 文件(这个文件名和文件的路径随意,只要在mongodb目录下就行)
#数据库路径dbpath=c:MongoDBdata#日志输出文件路径logpath=c:MongoDBlogmongodb.log#错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件logappend=true#启用日志文件,默认启用journal=true#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为falsequiet=false#端口 默认为27017port=27017
然后在cmd中输入下面命令,命名该服务名为 mongodb
mongod --config c:MongoDBmongodb.conf --install --serviceName "mongodb"
验证是否配置成功
net stop mongodbnet start mongodb
参考下文第四点: Windows下图文详解Mongodb安装及配置
3、Kali 下MongoDB安装
1)导入MongoDB密钥
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add -
2)创建文件
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
3)更新软件包数据库
sudo apt-get update
4)安装MongoDB软件包
sudo apt-get install -y mongodb-org
4、Kali MongoDB服务配置
1)启动MongoDB服务
sudo systemctl start mongod#查看端口信息netstat -ntulp
2)检查服务状态
systemctl status mongod
3)停止MongoDB服务
systemctl stop mongod
4)重启MongoDB服务
systemctl restart mongod
5)设置允许远程连接可在远程访问该库信息
sudo vi /etc/mongod.conf# 修改bindIP为0.0.0.0?# network interfacesnet:port: 27017bindIp: 0.0.0.0
6)Kali 卸载MongoDB
删除软件包:
sudo apt-get purge mongodb-org*
可以通过下面命令来查看这些软件包文件,也可以检测是否删除完成
locate monodb-org
删除数据目录:
sudo rm -r /var/log/mongodbsudo rm -r /var/lib/mongodb
三、MongoDB基本操作
1、简单概念
MongoDB Shell 是 MongoDB 自带的交互式 Javascript shell ,用于对 MongoDB 进行操作和管理的交互式环境。进入到 MongoDB shell 后,直接在命令行窗口下输入 mongo 即可(前提是配置了环境变量),进入后默认连接到test(数据库)。由于自带交互式 Javascript shell ,可以直接在Mongo shell里进行一些简单的计算操作。
> 1+12> 0x10+0x1032
2、基本命令
1)查看数据库列表
show dbs
2)查看当前数据库
默认登陆后,当前数据库为test
db
3)创建数据库
use xiguadb
这里创建的xiguadb数据库并没有显示在dbs中,需要在xiguadb数据库中添加文档即可
4)插入数据
db.xiguadb.insert({"name":"john"})
插入文档后,dbs中显示了xiguadb数据库 注:这里文档是插入到名为xiguadb的集合中(自动创建的集合)
5)查看集合列表
当前数据库下的所有集合列表
show collectio
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!