docker Mongodb未授权访问漏洞解决

Mongodb未授权访问漏洞【原理扫描】

扫描出来的如下:

详细描述

MongoDB是用C++编写的开源文档数据库。

在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息!当admin.system.users一个用户都没有时,即使mongodb启动时添加了--auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否是以--auth 参数启动),直到在admin.system.users中添加了一个用户。

解决办法

方法一:
可以修改端口和指定访问ip
 
具体根据实际情况来设定,也可以直接在服务器防火墙上做设置。
方法二:
在admin.system.users中添加用户,启动认证。
 
#在admin 数据库中创建用户123, 密码为nsfocus(此处均为举例说明)
[mongodb@nsfocus]$ ./mongo 127.0.0.1:27017
MongoDB shell version: 2.0.1
connecting to: 127.0.0.1:27017/test
> use admin
switched to db admin
>
> db.addUser("123", "nsfocus")  
{ "n" : 0, "connectionId" : 4, "err" : null, "ok" : 1 }
{
        "user" : "123",
        "readOnly" : false,
        "pwd" : "51a481f72b8b8218df9fee50b3737c44",
        "_id" : ObjectId("4f2bc0d357a309043c6947a4")
}
> db.auth("123","nsfocus")
1
> exit
bye

测试:

只输入ip,不输入用户名密码即可链接进入
执行:

use admin

show dbs

无授权情况下,返回了所有db列表

实际操作:

先登陆进去,修改admin密码

docker exec -it mongodb405 mongo admin
db.changeUserPassword("admin","xxxxx")

原来的container创建如下:

docker run -p 27017:27017 -v /data/mongodb405/data/:/data/db --name mongodb405 -d mongo:4.0.5

修改加入--auth参数:

docker run -p 27017:27017 -v /data/mongodb405/data/:/data/db --restart always --name mongodb405 -d mongo:4.0.5 mongod --auth

再次登陆测试:

docker exec -it mongodb405 mongo admin
use admin

show dbs

会提示错误:

"errmsg" : "command listDatabases requires authentication",
        "code" : 13,
        "codeName" : "Unauthorized"

执行:

db.auth("admin","xxxxx")

返回1成功

use admin

show dbs

返回所有DB列表则为成功

你可能感兴趣的:(mongodb)