前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【漏洞修复】MongoDB未授权访问漏洞复现和修复

【漏洞修复】MongoDB未授权访问漏洞复现和修复

原创
作者头像
腾讯云-MSS服务
修改2020-10-22 17:39:39
11.4K1
修改2020-10-22 17:39:39
举报
文章被收录于专栏:安全加固安全加固

0X01漏洞描述

MongoDB服务安装后,默认未开启权限验证。如果服务监听在0.0.0.0,则可远程无需授权访问数据库。

3.0之前版本的MongoDB,默认监听在0.0.0.0,3.0及之后版本默认监听在127.0.0.1。

3.0之前版本,如未添加用户管理员账号及数据库账号,使用--auth参数启动时,在本地通过127.0.0.1仍可无需账号密码登陆访问数据库,远程访问则提示需认证;

3.0及之后版本,使用--auth参数启动后,无账号则本地和远程均无任何数据库访问权限。

0X02 漏洞危害

开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增删改高危动作)而且可以远程访问数据库。

0X03 漏洞验证

1、 nmap验证漏洞

代码语言:javascript
复制
nmap -p 27017 --script mongodb-info <ip>

2、 msf验证漏洞

0X04 修复建议

1、 MongoDB只需在本地使用,建议只在本地开启监听服务,使用--bind_ip 127.0.0.1绑定监听地址

mongod --bind_ip 127.0.0.1 --dbpath /tmp/test

或:在配置文件中指定监听IP,Linux下默认配置文件为/etc/mongod.conf。

# network interfaces

net:

port: 27017

bindIp: 127.0.0.1

2、 策略仅允许指定的IP来访问MongoDB

iptables -A INPUT -s -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -d -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

3、 启动基于角色的登录认证功能

MongoDB 3.0及以上版本启动时添加--auth参数开启认证访问,此时若数据库中无账号,本地登录则无权限进行任何操作,因此需要先以无认证的方式启动服务并创建系统用户管理员账号。

1)以无访问认证的方式启动MongoDB

$ mongod --dbpath /data/db

2)未开启认证的环境下,登录到数据库

$ mongo --host 127.0.0.1 --port 27017

ongoDB shell version v4.0.8

connecting to: mongodb://127.0.0.1:27017/test?gssapiServiceName=mongodb

3)创建系统用户管理员创建一个用户名为myUserAdmin,密码为Passw0rd的系统用户管理员账号。

#切换到admin库:

> use admin

switched to db admin

#创建用户

> db.createUser(

{

user: "myUserAdmin",

pwd: "Passw0rd",

roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

}

)

#创建成功后提示信息:

Successfully added user: {

"user" : "myUserAdmin",

"roles" : [

{

"role" : "userAdminAnyDatabase",

"db" : "admin"

}

]

}

说明:3.0之前版本使用db.addUser方法创建用户。

4)重启MongoDB服务,开启访问认证启动时添加--auth参数

$ mongod --auth --port 27017 --dbpath /tmp/test

或:在配置文件中添加以下内容,指定配置文件启动服务:

#security:

security:

authorization: enabled

指定配置文件启动MongoDB

$ mongod --config /etc/mongod.conf

5)使用系统用户管理员账号登录

$ mongo --port 27017 -u "myUserAdmin" -p "Passw0rd" --authenticationDatabase "admin"

也可以在连接MongoDB是不指定认证信息,连接成功后通过db.auth()方法进行认证:

> use admin

switched to db admin

> db.auth("myUserAdmin","Passw0rd")

1 #返回1,表示认证成功

6)创建数据库用户创建完系统用户管理员账号并通过系统用户管理员登陆后,对每个库创建指定的用户。下面以对products库创建一个具有读写权限的用户accountUser为例:

> use products

> db.createUser(

{

user: "accountUser",

pwd: "password",

roles: [ "readWrite", "dbAdmin" ]

}

)

#用户创建成功

Successfully added user: { "user" : "accountUser", "roles" : [ "readWrite", "dbAdmin" ] }

7)使用数据库用户访问指定库

$ mongo --port 27017 -u "accountUser" -p "password" --authenticationDatabase "products"

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0X01漏洞描述
  • 0X02 漏洞危害
  • 0X03 漏洞验证
    • 1、 nmap验证漏洞
      • 2、 msf验证漏洞
      • 0X04 修复建议
        • 1、 MongoDB只需在本地使用,建议只在本地开启监听服务,使用--bind_ip 127.0.0.1绑定监听地址
          • 2、 策略仅允许指定的IP来访问MongoDB
            • 3、 启动基于角色的登录认证功能
              • 1)以无访问认证的方式启动MongoDB
              • 2)未开启认证的环境下,登录到数据库
              • 3)创建系统用户管理员创建一个用户名为myUserAdmin,密码为Passw0rd的系统用户管理员账号。
              • 4)重启MongoDB服务,开启访问认证启动时添加--auth参数
              • 5)使用系统用户管理员账号登录
              • 6)创建数据库用户创建完系统用户管理员账号并通过系统用户管理员登陆后,对每个库创建指定的用户。下面以对products库创建一个具有读写权限的用户accountUser为例:
              • 7)使用数据库用户访问指定库
          相关产品与服务
          云数据库 MongoDB
          腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档