本篇文章是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 interfaces
net:
port: 27017
bindIp: 0.0.0.0
配置环境变量
将 bin 目录配置进环境变量 C:\MongoDB\bin
测试是否配置成功,在cmd下直接输入mongo即可判断
配置文件启动
目的:将 mongodb 服务安装到 Windows 服务中,可以通过net命令进行开启和关闭
首先在 C:\MongoDB 目录下创建一个 mongodb.conf 文件(这个文件名和文件的路径随意,只要在mongodb目录下就行)
编辑该文件,配置相关信息,修改部分即可
#数据库路径
dbpath=c:\MongoDB