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清單則為成功