MongoDB未授權訪問漏洞

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 12:16
下一篇 2024-12-07 12:17

相關推薦

  • Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901解析

    本文將對Treck TCP/IP Stack 輸入驗證錯誤漏洞CVE-2020-11901進行詳細解析,並提供相關代碼示例。 一、漏洞背景 Treck TCP/IP Stack是一…

    編程 2025-04-27
  • Python漏洞挖掘全指南

    本文將從多個方面詳細闡述Python漏洞挖掘的相關知識,幫助開發工程師了解並掌握漏洞挖掘的基礎知識和實戰技巧。 一、漏洞類型 漏洞是指誤用或設計上的錯誤,可導致產品、應用或系統中存…

    編程 2025-04-27
  • Coremail 漏洞詳解

    Coremail是國內主流的企業郵件伺服器軟體,2018年曝出多個漏洞。本文將詳細闡述Coremail漏洞的危害,漏洞種類和利用方法。同時提供完整的代碼示例,幫助讀者更加深入地了解…

    編程 2025-04-25
  • Python連接MongoDB資料庫

    MongoDB是一個流行的開源、非關係型、文檔型資料庫。Python具有簡單、易學的語法、廣泛的應用能力,因此它很適合連接MongoDB資料庫。本文將從以下幾個方面詳細討論Pyth…

    編程 2025-04-25
  • POC環境:構建你的漏洞驗證平台

    一、POC環境基礎概念 POC(Proof of Concept)環境是指基於特定漏洞的驗證平台,是信息安全研究的重要組成部分。其主要目的是為了漏洞檢測、漏洞復現、漏洞演示和漏洞攻…

    編程 2025-04-24
  • MongoDB使用詳解

    一、什麼是MongoDB? MongoDB是一個基於分散式文件存儲的NoSQL資料庫。 與傳統關係型資料庫不同,MongoDB沒有固定表結構,採用文檔存儲方式。文檔是JSON格式的…

    編程 2025-04-24
  • 中國國家漏洞庫完整解析

    一、什麼是中國國家漏洞庫 中國國家漏洞庫(以下簡稱CNVD)是國家信息安全漏洞共享平台,為國內外安全廠商、安全愛好者提供安全漏洞信息共享和管理服務。它由國家信息安全漏洞庫管理中心負…

    編程 2025-04-24
  • Linux MongoDB安裝指南

    一、安裝前的準備工作 在安裝 MongoDB 之前,我們需要進行以下準備工作: 1、檢查是否已經安裝了 MongoDB。可以通過運行命令:mongod –version…

    編程 2025-04-23
  • ThinkPHP v5.0.24漏洞利用詳解

    一、什麼是ThinkPHP v5.0.24漏洞? 近日,ThinkPHP官方發布了一份安全公告,宣布存在嚴重漏洞。該漏洞影響了採用ThinkPHP v5.0.24及以下版本的應用,…

    編程 2025-04-23
  • MongoDB連接池詳解

    MongoDB連接池是一個重要的組件,可以優化MongoDB的訪問性能和資源利用率。在本文中,我們從多個方面探討MongoDB連接池的配置、錯誤、模式、大小、參數設置和代碼實現步驟…

    編程 2025-04-23

發表回復

登錄後才能評論