天天看點

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(此處均為舉例說明)

[[email protected]]$ ./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清單則為成功