用途
本技能用于在 Web 应用渗透测试、API 安全评估和漏洞赏金活动中,检测并利用 NoSQL 注入漏洞,主要面向使用 MongoDB、CouchDB、Cassandra 等 NoSQL 数据库的应用。技能说明了几类典型使用时机:测试以 NoSQL 数据库为后端的认证机制、评估接受 JSON 输入用于数据库查询的 API、对 NoSQL 后端应用进行漏洞赏金挖掘,以及在安全代码审计中检查数据库查询构造方式。
主要能力
技能围绕 MongoDB 查询运算符展开,涵盖以下能力方向:
- 注入点识别:通过 HTTP 请求测试 JSON 登录表单、API 端点、查询参数和 HTTP 头部,判断是否存在注入点,并可通过错误信息进行检测。
- 认证绕过:使用 $ne、$gt、$regex、$exists 等运算符构造载荷,绕过基于 MongoDB 的登录校验。
- 盲注数据提取:在无直接回显时,利用 $regex 进行逐字符的布尔盲注,提取用户名、密码、API 密钥等数据。
- $where JavaScript 注入:通过 $where 运算符在 MongoDB 服务端执行 JavaScript,包括基于时间的 sleep 检测和数据外泄。
- 自动化测试:使用 NoSQLMap 和 nosqli 等工具进行自动化扫描与利用。
- URL 参数注入:针对 GET 请求的参数注入以及数组注入方式。
技能中给出的关键概念包括运算符注入、认证绕过、盲注提取、$where 注入、类型混淆、BSON 注入和服务端 JavaScript 执行。列出的工具与系统包括 NoSQLMap、Burp Suite、MongoDB Shell、nosqli、PayloadsAllTheThings、Nuclei 和 Postman,并说明了各自用途。
使用方式
技能以分步骤工作流的形式组织,每一步都配有可直接使用的命令示例:
- 步骤 1 识别注入点:使用 curl 向 JSON 接口和查询参数发送带破坏性字符的请求,并检查错误响应。
- 步骤 2 认证绕过:演示使用 $ne、$gt、$regex、$exists 构造登录载荷的多种写法。
- 步骤 3 布尔盲注提取:用 $regex 从首字符开始逐步匹配,逐字符还原数据;也可用于枚举用户名。
- 步骤 4 $where JavaScript 注入:演示通过 $where 进行条件判断、基于 sleep 的时间检测以及利用正则匹配外泄数据。
- 步骤 5 自动化测试:给出 NoSQLMap 的克隆、安装与运行命令,以及 nosqli 扫描器的安装与使用命令。
- 步骤 6 URL 参数注入:给出 GET 参数中 $ne、$regex、$gt、$exists、$in 数组以及 HTTP 头部注入的示例。
前置条件要求:具备 JSON 支持的 Burp Suite(专业版或社区版)、安装 NoSQLMap、理解 MongoDB 查询运算符、存在使用 NoSQL 数据库的目标应用、配置好用于 HTTP 流量拦截的代理,以及 Python 3.x 用于自定义载荷脚本。
适用场景
技能列出了若干常见场景:登录绕过(在用户名和密码字段使用 {"$ne": ""} 注入绕过认证)、数据枚举(在无直接输出时用 $regex 盲注逐字符提取数据库内容)、权限提升(通过资料更新端点的 NoSQL 注入修改用户角色字段)、API 密钥提取(用基于布尔的盲注技术提取 MongoDB 集合中的 API 密钥或令牌)、账户接管(先用正则注入枚举有效用户名,再通过基于运算符的认证绕过爆破密码)。
报告输出
技能提供了 NoSQL 注入评估报告的输出格式示例,包含目标、数据库版本、漏洞类型与严重级别,以及存在漏洞的参数表格(端点、参数、注入类型、影响)、概念验证内容和修复建议。修复建议包括:使用参数化查询与 MongoDB 驱动净化、实施输入类型校验(在期望字符串处拒绝对象)、在 MongoDB 配置中禁用服务端 JavaScript 执行($where)、应用最小权限的数据库访问控制。
限制
技能文本中未给出其自身的适用限制说明,仅在实际测试环节对目标环境提出了前置条件要求(存在使用 NoSQL 数据库的目标应用、已配置代理等)。技能内容属于安全测试用途,须在获得授权的环境中使用。