首页/安全/渗透测试与安全评估速查/NoSQL 注入验证(MongoDB 等)
常见漏洞验证121 条

NoSQL 注入验证(MongoDB 等)

NoSQL 注入多来自把用户输入直接当查询条件解析:把字符串字段替换为对象结构时,查询运算符可能被携带进去,导致条件被改写。

NoSQL 注入的成因

NoSQL 数据库的查询条件常用文档结构表达,如果服务端把请求体里的值直接当查询条件解析,而不是先做类型校验,就会出现类型混淆:原本应该是字符串的字段被替换成对象或数组后,查询运算符被一并携带进去,条件被改写,返回结果因此偏离预期。验证的目标是确认条件是否被改写,而不是导出数据。

基本信息

典型场景JSON 请求体中字段类型被改写,字符串变成对象或数组
常见入口登录、筛选、搜索、批量查询接口
判定信号返回结果与预期不符,或出现异常记录
验证边界只确认条件是否被改写,不导出数据
记录要求接口、字段名、类型改写现象与对照请求结果

典型使用场景

  • 登录接口的用户名字段类型校验
  • 列表筛选接口的条件字段类型校验
  • 搜索接口的关键词与范围字段处理
  • 批量查询接口的标识数组处理
  • 接口文档中标注接受任意类型参数的字段

验证清单

验证清单
# 1. 找出接收 JSON 且直接进入查询的接口(登录、筛选、搜索)
# 2. 将某字符串字段改为对象结构提交,观察逻辑是否被改变
# 3. 同时发送一次常规请求做对照,排除业务规则本身的影响
# 4. 记录接口、字段名、类型改写现象(不记录可用条件组合)
# 5. 疑似成立即停止;使用测试账号操作,便于清理与复核

结果读法

结果含义定级参考
返回记录超出预期查询条件被改写中高,取决于可读数据范围
校验错误提示存在类型校验正常,记录为已校验
接口异常报错类型不匹配导致查询失败低到中,属健壮性问题
结果与常规请求一致条件未被改写正常,标注未复现
修复视角:对入参做严格类型校验(该是字符串就必须是字符串),并在数据库层限制应用账号的集合访问权限。
验证只在测试账号与测试数据范围内进行,不要用改写后的条件读取真实用户的业务数据。

易错点

  • 只测字符串型参数,漏掉数组与对象类型混淆的路径
  • 把正常业务返回当成注入证据,缺少对照请求
  • 用改写条件读取真实用户数据,把验证变成数据获取
  • 只测登录接口,漏掉筛选、搜索与批量查询等入口

数据来源与参考

  • OWASP WSTG(Testing for NoSQL Injection)
  • MongoDB 官方安全文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌