MongoDB 学习
基础知识
端口号:27017初始数据库
admin:从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合config:当 Mongo 用于分片设置时,config 数据库在内部使用,用于保存分片的相关信息
安装 MongoDB
windows
# 下载安装包,第二个是图形界面管理工具 https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-4.4.13.zip https://downloads.mongodb.com/compass/mongodb-compass-1.31.2-win32-x64.zip # 解压至 C:\mongodb\ 目录下 # 配置环境变量:C:\mongodb\bin # 编写配置文件,便于后续以配置文件的方式启动 MongoDB 服务,创建 C:\mongodb\mongodb.conf 文件,写入如下内容,然后保存# 系统日志相关 systemLog: destination: file # 使用文件存储日志 path: C:\mongodb\log\mongodb.log # 日志位置,创建 \log 目录 logAppend: true # 是否以追加的形式记录日志 # 数据相关 storage: journal: # 回滚日志 enabled: true dbPath: C:\mongodb\data\db # 数据存储目录,创建 \data\db 目录 # 网络配置相关 net: port: 27017 # 默认端口 bindIp: 0.0.0.0 # 绑定ip,多个ip以逗号分隔# 将 MongoDB 服务添加 Windows 的服务,以管理员的身份打开终端 mongod --config C:\mongodb\mongodb.conf --install # 在终端开启 MongoDB 服务 net start mongodbkali
# 添加软件包 apt-get install gnupg wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add - echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.4 main" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list apt-get update # 最新版安装 apt-get install -y mongodb-org # 定制版安装,并锁定版本 apt-get install -y mongodb-org=4.4.13 mongodb-org-server=4.4.13 mongodb-org-shell=4.4.13 mongodb-org-mongos=4.4.13 mongodb-org-tools=4.4.13 echo "mongodb-org hold" | dpkg --set-selections echo "mongodb-org-server hold" | dpkg --set-selections echo "mongodb-org-shell hold" | dpkg --set-selections echo "mongodb-org-mongos hold" | dpkg --set-selections echo "mongodb-org-tools hold" | dpkg --set-selections # 启动 MongoDB systemctl daemon-reload systemctl start mongod systemctl status mongod systemctl enable mongod # 查看日志 cat /var/log/mongodb/mongod.log # 配置远程连接,第 24 行修改 bindIp 为 0.0.0.0 vim /etc/mongod.conf # 重启服务 systemctl restart mongod # 开启交互式shell mongo创建用户
# 配置服务并设置远程连接 mongo use admin # 新建用户 db.createUser({user:"Toki",pwd:"123456",roles:[{"role":"userAdmin","db":"admin"},{"role":"root","db":"admin"},{"role":"userAdminAnyDatabase","db":"admin"}]}) # 对账号授权 db.auth("Toki","123456") # 远程登录 mongo -u Toki -p 123456 <目标机IP>:27017/admin # 账号管理命令 # 修改用户权限 db.updateUser("Toki", {roles:[{role:"readWriteAnyDatabase", db:"admin"}] }) # 修改用户密码 db.changeUserPassword("Toki","123456") # 删除用户 db.dropUser('Toki')
常用命令
MongoDB 可以有多个数据库,每个数据库都含有一个或多个集合 collections,每个集合都含有一个或多个文档 documents
# 创建数据库 use <库名> # 查看当前数据库 db # 将数据插入集合 db.data.insert({"user":"Toki"}) db.data.insert({"Toki":"123"}) db.data.insert({"Toki":"456"}) # 查看数据库列表 show dbs # 查询数据 db.data.find() # 在查询数据时写入条件 db.data.find({"user":"Toki"}) # 删除数据 db.data.remove({"Toki":"456"}) db.data.find() # 删除集合 show collections db.data.drop() show collections # 删除数据库 db.dropDatabase() show dbs
在线靶场
MSF渗透Mongodb
MongoDB 默认端口 27017,当配置成无验证时,存在未授权访问,使用 msf 中的 scanner/mongodb/mongodb_login 模块进行测试,使用 navicat 连接获取数据库中的内容。
自动化评估
NoSQLMap
介绍:
NoSQLMap 是一个开源的 Python 工具,用于审计和自动化注入攻击,并利用 NoSQL 数据库中的缺省配置弱点,以及使用 NoSQL 的 Web 应用程序来泄露数据库中的数据。目前,这个工具的漏洞主要集中在 MongoDB 上,但是在未来的版本中计划对其他基于 NoSQL 的平台(如 CouchDB,Redis 和 Cassandra)提供额外的支持。
特性:
自动化的 MongoDB 和 CouchDB 数据库枚举和克隆攻击。
通过 MongoDB Web 应用程序提取数据库名称,用户和密码哈希。
使用默认访问和枚举版本扫描 MongoDB 和 CouchDB 数据库的子网或 IP 列表。
使用强力字典爆破 MongoDB 和 CouchDB 的哈希。
针对 MongoClient 的 PHP 应用程序参数注入攻击返回所有数据库记录。
Javascript 函数变量转义和任意代码注入来返回所有的数据库记录。
基于计时的攻击类似于 SQL 盲注来验证没有回显信息的 Javascript 注入漏洞。
下载:
整改加固建议
本地监听
如 MongoDB 只需在本地使用,建议只在本地开启监听服务,使用 --bind_ip 127.0.0.1 绑定监听地址
或着在配置文件中指定监听 IP,Linux 下默认配置文件为 /etc/mongod.conf
指定配置文件启动
3.0 及之后版本的 MongoDB,监听服务默认只对 127.0.0.1 开放
限制访问源
如果仅对内网服务器提供服务,建议禁止将 MongoDB 服务发布到互联网上,并在主机上通过防火墙限制访问源 IP
Linux 使用 iptables 进行限制
Windows 可以通过图形管理界面添加防火墙策略或使用 netsh 命令添加,参考文档:https://docs.mongodb.com/manual/tutorial/configure-windows-netsh-firewall/
启动基于角色的登录认证功能
MongoDB 支持 SCRAM、x.509 证书认证等多种认证机制,SCRAM(Salted Challenge Response Authentication Mechanism 加盐挑战响应认证机制)是 3.x 版本的默认认证机制,该机制通过用户名、密码验证,基于用户角色进行访问控制。
MongoDB 3.0 及以上版本启动时添加
--auth参数开启认证访问,此时若数据库中无账号,本地登录则无权限进行任何操作,因此需要先以无认证的方式启动服务并创建系统用户管理员账号。
Last updated