天天看點

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

MongoDB未授權通路

漏洞危害

MongoDB服務開放在公網上時,若未配置通路認證授權,則攻擊者可無需認證即可連接配接資料庫,對資料庫進行任何操作(增、删、改、查等高危操作),并造成嚴重的敏感洩露風險。

漏洞成因

MongoDB服務安裝後,預設未開啟權限認證,且服務監聽在0.0.0.0.,會造成遠端未授權通路漏洞

在mongo資料庫服務監聽在0.0.0.0的情況下,若未在admin資料庫中添加任何賬号,且未使用–auth參數啟動mongoDB服務,則會造成未授權通路(二者缺一不可)。隻有添加在admin中添加了賬号,并使用–auth參數啟動時,Mongodb的認證授權服務才能生效

環境搭建

測試機:

kali——ip:192.168.0.109

windows——ip:192.168.0.113

靶機:

CentOS7——ip:192.168.0.114

漏洞環境采用docker搭建

拉取mongo鏡像

docker pull mongo
           

建立一個新的容器并運作指令

docker run -d -p 27017:27017 mongo
           

顯示正在運作的容器

可以看到資料庫mongodb服務的容器id:e4fce18258c2 和其開放ip段、端口為0.0.0.0:27017

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

檢視mongodb資料庫的版本

docker exec e4fce18258c2 mongo -version
           
MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

漏洞複現

通過上面的mongo狀态可以看到,資料庫開放位址為0.0.0.0:27017,且資料庫未通過–auth登入過,是以此時mongodb資料庫的認證機制不能正常工作的,外部可以無需認證即可直接連接配接資料庫

複現

使用msf中mongodb登入的輔助子產品進行攻擊示範

use auxiliary/scanner/mongodb/mongodb_login
set rhost 192.168.0.114     
exploit
           

結果顯示Mongo server沒有開啟認證

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

使用圖像化界面連接配接MongoDB資料庫

圖形化工具下載下傳位址

https://robomongo.org/download

下載下傳——安裝——連接配接,沒什麼好說的

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

連接配接成功

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

防禦加強測試

在靶機上添加管理者使用者

docker exec -it <容器id> /bin/bash
mongo 172.17.0.1        //不使用--auth參數連接配接資料庫
>show dbs
>use admin
>db.createUser({user:"admin",pwd:"123456",roles:["root"]})
>db.createUser({user:"test",pwd:"123456",roles:["root"]})
           

建立成功

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

通過遠端圖形連接配接界面可以看到成功建立了兩個管理者使用者

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

我們靶機上是并沒有通過–auth參數開啟mongo服務的,是以即使現在建立了管理者賬戶也還是可以不用認證而連接配接mongo資料庫

删除連接配接

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路
MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

再次直連

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

仍然可以無需認證而連接配接成功

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

接下來我們停止mongo服務,添加–auth參數再開啟

mongo 172.17.0.1
>use admin
>db.shutdownServer()
           
MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

添加–auth參數開啟docker,mongo

docker run -d -p 27017:27017 mongo --auth
           
MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

注意,因為我們關閉mongo服務時連docker一起關閉了,是以現在開啟的mongo中是沒有我們上面添加的賬号資訊的,為了驗證授權登入,這裡我們再次設定一個管理者賬号

db.createUser({user:“admin”,pwd:“123456”,roles:[“root”]})

開啟成功,再次使用圖形化界面連接配接

連接配接失敗,說明認證開啟成功了

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

輸入賬号密碼進行認證

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路
MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

授權驗證連接配接成功

MongoDB未授權通路漏洞複現及docker.mongodb下--auth授權驗證MongoDB未授權通路

防禦

0.修改預設端口(不太有用)

1.隻開啟本地監聽

2.限制通路源,隻對内網提供服務

3.啟動服務時,添加–auth參數開啟通路認證

4.禁用HTTP和REST端口

參考

https://www.freebuf.com/vuls/212799.html

注:本文中極大的簡化了啟動mongo資料庫服務時的指令參數,不建議開發人員參考本文使用mongodb資料庫,如有意外,概不負責。

開發人員學習mongodb請移步https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html