天天看點

mongodb未授權通路漏洞

mongodb未授權通路漏洞

catalogue

1. mongodb安裝
2. 未授權通路漏洞
3. 漏洞修複及加強
4. 自動化檢測點      

1. mongodb安裝

apt-get install mongodb

0x1: 建立資料庫目錄

MongoDB的資料存儲在data目錄的db目錄下,但是這個目錄在安裝過程不會自動建立,是以你需要手動建立data目錄,并在data目錄中建立db目錄。/data/db 是 MongoDB 預設的啟動的資料庫路徑(--dbpath)

mkdir -p /data/db      

0x2: 指令行中運作 MongoDB 服務

注意: 如果你的資料庫目錄不是/data/db,可以通過 --dbpath 來指定

0x3: MongoDB背景管理 Shell

如果你需要進入MongoDB背景管理,你需要先打開mongodb裝目錄的下的bin目錄,然後執行mongo指令檔案。MongoDB Shell是MongoDB自帶的互動式Javascript shell,用來對MongoDB進行操作和管理的互動式環境。當你進入mongoDB背景後,它預設會連結到 test 文檔(資料庫)

root@iZ23und3yqhZ:~# mongo
MongoDB shell version: 2.4.9
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
>       

現在讓我們插入一些簡單的資料,并對插入的資料進行檢索

> db.runoob.insert({x:10})
> db.runoob.find()
{ "_id" : ObjectId("586df25ead93a0064a40a3ae"), "x" : 10 }
>       

0x4: MongoDb web 使用者界面

MongoDB 提供了簡單的 HTTP 使用者界面。 如果你想啟用該功能,需要在啟動的時候指定參數 --rest

./mongod --dbpath=/data/db --rest      

MongoDB 的 Web 界面通路端口比服務的端口多1000

如果你的MongoDB運作端口使用預設的27017,你可以在端口号為28017通路web使用者界面,即位址為:http://localhost:28017

Relevant Link:

http://www.runoob.com/mongodb/mongodb-linux-install.html      

2. 未授權通路漏洞

開啟MongoDB服務時不添加任何參數時,預設是沒有權限驗證的,登入的使用者可以通過預設端口無需密碼對資料庫任意操作(增删改高危動作)而且可以遠端通路資料庫

0x1: 漏洞成因

在剛安裝完畢的時候MongoDB都預設有一個admin資料庫,此時admin資料庫是空的,沒有記錄權限相關的資訊!當admin.system.users一個使用者都沒有時,即使mongod啟動時添加了—auth參數,如果沒有在admin資料庫中添加使用者,此時不進行任何認證還是可以做任何操作(不管是否是以—auth 參數啟動),直到在admin.system.users中添加了一個使用者。加強的核心是隻有在admin.system.users中添加使用者之後,mongodb的認證,授權服務才能生效

https://www.secpulse.com/archives/27090.html
http://webscan.360.cn/vul/view/vulid/3558      

3. 漏洞修複及加強

0x1: 修改預設端口

修改預設的mongoDB端口(預設為: TCP 27017)為其他端口

0x2: 不要開放到公網0.0.0.0

vim /etc/mongodb.conf 
bind_ip = 127.0.0.1      

和redis一樣,mongodb最好隻開放本地監聽,至少不能是0.0.0.0

0x3: 禁用HTTP和REST端口

MongoDB自身帶有一個HTTP服務和并支援REST接口。在2.6以後這些接口預設是關閉的。mongoDB預設會使用預設端口監聽web服務,一般不需要通過web方式進行遠端管理,建議禁用。修改配置檔案或在啟動的時候選擇–nohttpinterface 參數nohttpinterface = false

0x4: 開啟日志審計功能

審計功能可以用來記錄使用者對資料庫的所有相關操作。這些記錄可以讓系統管理者在需要的時候分析資料庫在什麼時段發生了什麼事情

0x5: 開啟MongoDB授權

在admin 資料庫中建立使用者,如 supper 密碼為 sup(此處均為舉例說明,請勿使用此賬号密碼)

> use admin
switched to db admin
> db.addUser("supper", "sup")  
{
    "user" : "supper",
    "readOnly" : false,
    "pwd" : "f4e451395b5b554788c796e5488573b2",
    "_id" : ObjectId("586dfb12ad93a0064a40a3af")
}
> db.auth("supper","sup")
1
> exit
bye      

修改配置檔案

vim /etc/mongodb.conf 
auth = true      
https://laravel-china.org/topics/328
https://help.aliyun.com/knowledge_detail/37451.html      

4. 自動化檢測點

0x1: 檢測是否監聽到127.0.0.1

不管是配置檔案裡的,還是指令行參數裡的,隻要最終結果不是127.0.0.1,就認為是不安全的

--bind_ip 127.0.0.1
or
vim /etc/mongodb.conf 
bind_ip = 127.0.0.1      

0x2: 檢測是否開啟auth認證

mongod --auth
or
vim /etc/mongodb.conf 
auth = true      

Copyright (c) 2016 LittleHann All rights reserved