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 exec e4fce18258c2 mongo -version
漏洞複現
通過上面的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資料庫
圖形化工具下載下傳位址
https://robomongo.org/download
下載下傳——安裝——連接配接,沒什麼好說的
連接配接成功
防禦加強測試
在靶機上添加管理者使用者
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"]})
建立成功
通過遠端圖形連接配接界面可以看到成功建立了兩個管理者使用者
我們靶機上是并沒有通過–auth參數開啟mongo服務的,是以即使現在建立了管理者賬戶也還是可以不用認證而連接配接mongo資料庫
删除連接配接
再次直連
仍然可以無需認證而連接配接成功
接下來我們停止mongo服務,添加–auth參數再開啟
mongo 172.17.0.1
>use admin
>db.shutdownServer()
添加–auth參數開啟docker,mongo
docker run -d -p 27017:27017 mongo --auth
注意,因為我們關閉mongo服務時連docker一起關閉了,是以現在開啟的mongo中是沒有我們上面添加的賬号資訊的,為了驗證授權登入,這裡我們再次設定一個管理者賬号
db.createUser({user:“admin”,pwd:“123456”,roles:[“root”]})
開啟成功,再次使用圖形化界面連接配接
連接配接失敗,說明認證開啟成功了
輸入賬号密碼進行認證
授權驗證連接配接成功
防禦
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