「 典型安全漏洞系列 」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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型探索之路-实战篇:基于CVP架构-企业级知识库实战落地

目录 前言 一、概述 二、本地知识库需求分析 1. 知识库场景分析 2. 知识库应用特点 3. 知识库核心功能 三、本地知识库架构设计 1. RAG架构分析 2. 大模型方案选型 3. 应用技术架构选型 4. 向量数据库选型 5. 模型选型 三、本地知识库RAG评估 四、本地知识库代码落地 1. 文件…

Electron+React 搭建桌面应用

创建应用程序 创建 Electron 应用 使用 Webpack 创建新的 Electron 应用程序: npm init electron-applatest my-new-app -- --templatewebpack 启动应用 npm start 设置 Webpack 配置 添加依赖包,确保可以正确使用 JSX 和其他 React 功能&#xff…

【C++学习】深入理解C++异常处理机制:异常类型,捕获和处理策略

文章目录 ♫一.异常的提出♫二.异常的概念♫三.异常的使用♫3.1 异常的抛出和捕获♫3.2.异常的重新抛出♫3.3异常安全♫3.4 异常规范 ♫4.自定义异常体系♫5.C标准库的异常体系♫6.异常的优缺点 ♫一.异常的提出 之前: C语言传统的处理错误的方式与带来的弊端&…

C# WebSoket服务器

WebSocket是一种在单个TCP连接上进行全双工通信的协议WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单, 允许服务端主动向客户端推送数据。在WebSocket API中, 浏览器和服务器只需要完成一次握手, 两者之间就直接可以创建持久性的连…

人工智能科普:人工智能的分类

人工智能的分类多种多样,根据不同的标准和应用场景,可以将其划分为多个不同的类别。以下是对人工智能分类的详细探讨。 一、按应用领域分类 1. 智能机器人:智能机器人是人工智能技术在机器人领域的应用。它们能够根据环境和任务的不同进行自…

开源免费AI引擎:智能合同审查技术的应用与优势

随着数字化转型的加速,合同作为商业活动中的重要法律文件,其审查和管理变得越来越重要。传统的合同审查方式耗时且容易出错,而智能AI合同审查技术的引入,为这一领域带来了革命性的变化。本文将探讨智能AI合同审查技术的应用和优势…

实时智能应答3D数字人搭建2

先看效果: 3d数字人讲黑洞 根据艾媒咨询数据,2021年,中国虚拟人核心产业规模达到62.2亿元,带动市场规模达到1074.9亿元;2025年,这一数据预计将达到480.6亿元与6402.7亿元,同比增长迅猛。数字人可…

如何在Linux部署MeterSphere并实现公网访问进行远程测试工作

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

如何将powerpoint(PPT)幻灯片嵌入网页中在线预览、编辑并保存到服务器?

猿大师办公助手不仅可以把微软Office、金山WPS和永中Office的Word文档、Excel表格内嵌到浏览器网页中实现在线预览、编辑保存等操作,还可以把微软Office、金山WPS和永中Office的PPT幻灯片实现网页中在线预览、编辑并保存到服务器。 猿大师办公助手把本机原生Office…

各省份自然灾害损失情况数据集(2004-2022年)

01、数据简介 自然灾害是指给人类生存带来危害或损害人类生活环境的自然现象,这些现象是地球演化过程的自然现象。它们主要包括气象灾害、地质灾害、海洋灾害、生物灾害、森林草原火灾等五大类。 具体来说,气象灾害包括干旱、洪涝灾害、台风、风雹、低…

【CSS】一篇文章讲清楚screen、window和html元素的位置:top、left、width、height

一个Web网页从内到外的顺序是: 元素div,ul,table... → 页面body → 浏览器window → 屏幕screen 分类详情屏幕screen srceen.width - 屏幕的宽度 screen.height - 屏幕的高度(屏幕未缩放时,表示屏幕分辨率) screen.availLeft …

数据应用OneID:ID-Mapping Spark GraphX实现

前言 说明 以用户实体为例,ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识&#xff…

嵌入式学习52-ARM1

知识零散: 1.flash: nor flash 可被寻地址 …

【智能优化算法】河马优化算法(Hippopotamus optimization algorithm,HO)

河马优化算法(Hippopotamus optimization algorithm,HO)是发表在中科院二区期刊“Scientific Reports”的文章“Hippopotamus Optimization Algorithm: a Novel Nature-Inspired Optimization Algorithm”上的算法。 01.引言 河马优化算法&a…

LeetCode 1 in Python. Two Sum (两数之和)

两数之和算法思想很简单,即找到nums[i]和nums[j]target-(nums[i])返回[I, j ]即可。问题在于,简单的两层遍历循环时间复杂度为O(),而通过构建一个hash表就可将时间复杂度降至O(n)。本文给出两种方法的代码实现。 示例: 图1 两数之…

【noVNC】使用noVNC实现浏览器网页访问vnc(基于web的远程桌面)

1.VNC本身提供的http连接方式,可传输文件,画面有卡顿,需要安装jre 2.noVNC访问方式,不可传输文件,画面较为流畅,不用安装插件运行环境 一、noVNC 是什么 Web 端的Vnc软件,通过noVNC&#xff0…

[C++]让C++的opencv库支持写出h264格式视频

当我们写下面测试代码时候&#xff1a; #include <opencv2/opencv.hpp>int main() {cv::VideoCapture cap("E:\\car.mp4"); // 打开默认摄像头if (!cap.isOpened()) {std::cout << "读取完毕!" << std::endl;return -1;}double fps ca…

基于FPGA的以太网相关文章导航

首先需要了解以太网的一些接口协议标准&#xff0c;常见的MII、GMII、RGMII时序&#xff0c;便于后续开发。 【必读】从MII到RGMII&#xff0c;一文了解以太网PHY芯片不同传输接口信号时序&#xff01; 介绍一款比较老的以太网PHY芯片88E1518&#xff0c;具有RGMII接口&#xf…

【鸿蒙开发】第二十章 Camera相机服务

1 简介 开发者通过调用Camera Kit(相机服务)提供的接口可以开发相机应用&#xff0c;应用通过访问和操作相机硬件&#xff0c;实现基础操作&#xff0c;如预览、拍照和录像&#xff1b;还可以通过接口组合完成更多操作&#xff0c;如控制闪光灯和曝光时间、对焦或调焦等。 2 …

【C语言基础】:编译和链接(计算机中的翻译官)

文章目录 一、翻译环境和运行环境1. 翻译环境1.1 编译1.1.1 预处理1.1.2 编译1.1.3 汇编 1.2 链接 2. 运行环境 一、翻译环境和运行环境 我们在Visual Studio上写的C语言代码其实都是一些文本信息&#xff0c;计算机是不能够直接执行他们的&#xff0c;计算机只能够执行二进制…