「 典型安全漏洞系列 」14.NoSQL注入漏洞详解

NoSQL注入是一个漏洞,攻击者能够干扰应用程序对NoSQL数据库进行的查询,本文我们将研究如何测试一般的NoSQL漏洞,然后重点研究如何利用MongoDB中的漏洞(MongoDB是最流行的NoSQL数据库)。

img

1. 什么是NoSQL注入

NoSQL注入是一个漏洞,攻击者能够干扰应用程序对NoSQL数据库进行的查询。NoSQL注入可能使攻击者能够:

  • 绕过身份验证或保护机制。
  • 提取或编辑数据。
  • 导致拒绝服务。
  • 在服务器上执行代码。

2. NoSQL注入的类型

  • 语法注入:当您可以破坏NoSQL查询语法,使您能够注入自己的负载时,就会发生这种情况。该方法与SQL注入中使用的方法类似。然而,由于NoSQL数据库使用一系列查询语言、查询语法类型和不同的数据结构,因此攻击的性质差异很大。
  • 运算符注入:当您可以使用NoSQL查询运算符来操作查询时,就会发生这种情况。

2.1. 语法注入

攻击者可以通过尝试破坏查询语法来检测NoSQL注入漏洞。要做到这一点,请通过提交模糊字符串和特殊字符来系统地测试每个输入,如果应用程序没有对它们进行充分的净化或过滤,这些字符串和字符会触发数据库错误或其他一些可检测的行为。

考虑一个显示不同类别产品的购物应用程序。当用户选择Fizzy饮料类别时,其浏览器会请求以下URL:
https://insecure-website.com/product/lookup?category=fizzy
这导致应用程序发送JSON查询,以从MongoDB数据库中的 product 集合中检索相关产品:
this.category == 'fizzy'

2.1.1. 确定要处理的字符

要确定应用程序将哪些字符解释为语法,可以注入单个字符。例如,您可以提交 ’ ,这将导致以下MongoDB查询:

this.category == '''
如果这导致原始响应发生变化,则这可能表明 ’ 字符破坏了查询语法并导致语法错误。可以通过在输入中提交有效的查询字符串来确认这一点,例如通过转义引号:
this.category == '\''
如果这不会导致语法错误,这可能意味着应用程序容易受到注入攻击。

2.1.2. 确认条件行为

检测到漏洞后,下一步是确定是否可以使用NoSQL语法影响布尔条件。
要测试这一点,请发送两个请求,一个条件为false,一个为true。例如,您可以使用条件语句 ’ && 0 && 'x 和 ’ && 1 && 'x ,如下所示

https://insecure-website.com/product/lookup?category=fizzy'+%26%26+0+%26%26+'x
https://insecure-website.com/product/lookup?category=fizzy'+%26%26+1+%26%26+'x

如果应用程序的行为不同,这表明false条件会影响查询逻辑,而true条件则不会。这表明注入这种语法风格会影响服务器端查询。

2.1.3. 覆盖现有条件

现在您已经确定可以影响布尔条件,可以尝试覆盖现有条件以利用该漏洞。例如,您可以注入一个始终计算为true的JavaScript条件,例如 ‘||1||’ :
https://insecure-website.com/product/lookup?category=fizzy%27%7c%7c%31%7c%7c%27
这将导致以下MongoDB查询:this.category == 'fizzy'||'1'=='1'
由于注入的条件始终为true,因此修改后的查询将返回所有项。这使攻击者能够查看任何类别中的所有产品,包括隐藏或未知类别。

2.2. 运算符注入

NoSQL数据库通常使用查询运算符,这些运算符提供了指定数据必须满足的条件才能包含在查询结果中的方法。MongoDB查询运算符的示例包括:

  • $where:匹配满足JavaScript表达式的文档
  • $ne:匹配所有不等于指定值的值
  • $in:匹配数组中指定的所有值
  • $regex:选择值与指定正则表达式匹配的文档

攻击者可以注入查询运算符来操作NoSQL查询。要做到这一点,请系统地将不同的运算符提交到一系列用户输入中,然后查看错误消息或其他更改的响应。

在JSON消息中,可以将查询运算符作为嵌套对象插入。例如, {"username":"wiener"} 变为 {"username":{"$ne":"invalid"}},对于基于URL的输入,可以通过URL参数插入查询运算符。例如, username=wiener 变为 username[$ne]=invalid 。如果这不起作用,您可以尝试以下操作:

  1. 将请求方法从 GET 转换为 POST
  2. Content-Type 标头更改为 application/json
  3. 将JSON添加到消息正文中
  4. 在JSON中注入查询运算符

3. 漏洞防御

  • 使用接受字符的allowlist对用户输入进行消毒和验证
  • 使用参数化查询插入用户输入,而不是将用户输入直接连接到查询中
  • 为防止操作员插入,应用已接受密钥的允许列表

4. 参考

[1] https://portswigger.net/web-security/nosql-injection

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/545909.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Langchain入门到实战-第二弹

Langchain入门到实战 Langchain快速入门官网地址Langchain概述Langchain调用大模型更新计划 Langchain快速入门 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://python.langchain.com/Langchain概述 LangChain是一个…

thinkphp 框架封装curl请求

tp6 或者 tp8框架 在框架的app/common.php 文件里加一些方法就可以 app\common.php 在这个文件里加 以下代码 就可以实现基于 curl的请求方法 (记得要开启 php的curl扩展) 查看方法 cmd里输入 php -m if (!function_exists(get)) {/*** 发送get请求* param string $url 请求…

【御控物联】 Java JSON结构转换(2):对象To对象——属性重组

文章目录 一、JSON结构转换是什么?二、案例之《JSON对象 To JSON对象》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换,生成新的JS…

Stable Diffusion之文生图模型训练

1、数据准备 提前准备好一组相关的照片。 在线的图片处理网站 BIRME - Bulk Image Resizing Made Easy 2.0 (Online & Free) 将图片转成统一大小,支持批量处理,效率高 2、生成提示词 进入stable diffusion webui页面 旧版直接使用 train/proproc…

【服务器配置】ngnix环境配置

ngnix环境配置 概述 Nginx(发音为 “engine X”)是一个高性能的 HTTP 和反向代理服务器,也可用作邮件代理服务器。它以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。Nginx 被广泛用于提高网站的可扩展性和性能,因为它…

Android使用shape属性绘制边框内渐变色

目录 先上效果图实现方法shape属性介绍代码结果 先上效果图 这是使用AndroidStudio绘制的带有渐变色的边框背景色 实现方法 项目中由于UI设计需求,需要给按钮、控件设置带有背景色效果的。以下是UI效果图。 这里我们使用shape属性来绘制背景效果。 shape属性介…

JS-32-jQuery01-jQuery的引入

一、初识jQuery jQuery是JavaScript世界中使用最广泛的一个库。鉴于它如此流行,又如此好用,所以每一个入门JavaScript的前端工程师都应该了解和学习它。 jQuery是一个优秀的JS函数库。 (对BOM和DOM的封装) jQuery这么流行&#x…

IJKPLAYER源码分析-总体概述

1 前言 前面系列文章,对IJKPLAYER源码所涉及到的各个技术点、模块、关键技术及其实现原理,做了较为详细的梳理。但窃以为那只是微观层面的梳理,还不够完整不够透彻,本文拟尝试从宏观框架架构的视角加以补充。 算是抛砖引玉。 2 架…

idea运行Tomcat,控制台日志的中文乱码

一 版本 win10,idea2022,jdk18,tomcat9 二 问题描述 在idea上可以运行Tomcat。服务器启动后,可以正常访问本地的html文件。但是控制台的Tomcat日志出现了乱码:server与Tomcat Catlina Log两处。 三 无效的解决之道 1 idea的Help选项Edit …

设计模式-模板方法模式(TemplateMethod)

1. 概念 模板方法模式是一种行为设计模式,它在一个方法中定义算法的骨架,将一些步骤延迟到子类中实现。 2. 原理结构图 2.1 图 2.2 角色 抽象类(Abstract Class) 定义抽象的基本操作(Primitive Operations&#xff…

Redis单机版安装保姆级操作手册

Redis安装说明 大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis. 此处选择的Linux版本为CentOS 7. Redis的官方网站地址:https://redis.io/ 单机安装Redis 1.安装…

深度探索:Secure Hash Algorithm(SHA)全景解析

title: 深度探索:Secure Hash Algorithm(SHA)全景解析 date: 2024/4/15 18:33:17 updated: 2024/4/15 18:33:17 tags: SHA安全抗碰撞性算法版本实现细节性能优化发展历史应用案例 密码学中的哈希函数 一、哈希函数的定义 哈希函数是一种数…

Day55 动态规划 part15

Day55 动态规划 part15 392.判断子序列 我的思路: 自己还是只能想到双指针法 解答: class Solution {public boolean isSubsequence(String s, String t) {if(s.length() 0) {return true;}if(s.length() > t.length() || t.length() 0) {return false;}ch…

微信小程序认证指南及注意事项

如何认证小程序? 一、操作步骤 登录小程序后台: https://mp.weixin.qq.com/ (点击前往) 找到设置,基本设置; 在【基本信息】处有备案和认证入口; 点击微信认证的【去认证】; 按照步骤指引一步步填写信息&#xff…

秋招复习笔记——八股文部分:网络基础

TCP/IP 网络模型 应用层 最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都是在应用层实现。那么,当两个不同设备的应用需要通信的时候,应用就把应用数据传…

EPSON的RX8900CE适合用于安防摄像头产品

安防摄像头产品可以实现视频监控,运动检测,人脸识别等功能,并且可以支持远程访问,成了用户的“千里眼”。之前安防摄像头的价格比较高,一般比较重要的场合才会使用,目前随着安防摄像头价格逐渐降低&#xf…

简单工厂模式设计实验

实验内容: 楚锋软件公司欲基于Java 语言开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图、折线图等。楚锋软件公司图表库设计人员希望为应用系统开发人员提供一套灵活易用的图表库,而且可以较为…

【Redis深度解析】揭秘Cluster(集群):原理、机制与实战优化

Redis Cluster是Redis官方提供的分布式解决方案,通过数据分片与节点间通信机制,实现了水平扩展、高可用与数据容灾。本文将深入剖析Redis Cluster的工作原理、核心机制,并结合实战经验分享优化策略,为您打造坚实可靠的Redis分布式…

成都百洲文化传媒有限公司电商领域的新锐力量

在电商服务领域,成都百洲文化传媒有限公司凭借其专业的服务理念和创新的策略,正逐渐成为行业内的翘楚。这家公司不仅拥有资深的电商团队,还以其精准的市场定位和高效的服务模式,赢得了众多客户的信赖和好评。 一、专业团队&#…

vue--双向数据绑定原理

Vue采用数据劫持 发布者-订阅者模式实现双向数据绑定,实现逻辑图如下所示: 数据劫持 Vue 借助Object.defineProperty()来劫持各个属性,这样一来属性存取过程都会被监听到 发布者-订阅者模式 主要实现三个对象:Observer&#…