NoSQL数据库注入原理与实践

2024-12-17 19 0

NoSQL 注入

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

  • 绕过认证或保护机制。

  • 提取或编辑数据。

  • 导致拒绝服务。

  • 在服务器上执行代码

NoSQL 数据库以传统 SQL 关系表以外的格式存储和检索数据。它们使用多种查询语言,而不是像 SQL 这样的通用标准,并且关系约束较少。

NoSQL数据库注入原理与实践插图

更多信息

有关 NoSQL 数据库及其与 SQL 数据库区别的更多信息,请参阅 NoSQL 数据库。

NoSQL 注入类型

NoSQL 注入有两种不同类型:

  • 语法注入:当您可以破坏 NoSQL 查询语法,从而注入自己的有效载荷时,就会发生这种情况。其方法与 SQL 注入中使用的方法类似。但由于 NoSQL 数据库使用一系列查询语言、查询语法类型和不同的数据结构,因此攻击的性质也大不相同。

  • 操作符注入 - 这种情况发生在使用 NoSQL 查询操作符操作查询时。

在本专题中,我们将介绍如何测试一般的 NoSQL 漏洞,然后重点介绍如何利用最流行的 NoSQL 数据库 MongoDB 中的漏洞。我们还提供了一些实验课程,以便您实践所学知识。

NoSQL 语法注入

您可以通过尝试破坏查询语法来检测 NoSQL 注入漏洞。为此,通过提交模糊字符串和特殊字符对每个输入进行系统测试,如果应用程序未对这些字符串和特殊字符进行适当消毒或过滤,它们就会触发数据库错误或其他可检测行为。

如果知道目标数据库的 API 语言,就使用与该语言相关的特殊字符和模糊字符串。否则,请使用各种模糊字符串来针对多种 API 语言。

检测 MongoDB 中的语法注入

虑一个显示不同类别产品的购物应用程序。当用户选择汽水饮料类别时,浏览器会请求以下 URL:

https://insecure-website.com/product/lookup?category=fizzy

这将导致应用程序发送 JSON 查询,从 MongoDB 数据库的产品集合中检索相关产品:

this.category== 'fizzy'

要测试输入是否可能存在漏洞,请在类别参数值中提交一个模糊字符串。MongoDB 的示例字符串是

'"{

;$Foo}

$Foo \xYZ

使用该模糊字符串构建以下攻击:

https://insecure-website.com/product/lookup?category='%22%60%7b%0d%0a%3b%24Foo%7d%0d%0a%24Foo%20%5cxYZ%00

如果这会导致原始响应发生变化,这可能表明用户输入未被正确过滤或消毒。

注意

NoSQL 注入漏洞可能发生在各种情况下,您需要相应地调整模糊字符串。否则,您可能只会触发验证错误,这意味着应用程序永远不会执行您的查询。

在本例中,我们通过 URL 注入模糊字符串,因此该字符串是 URL 编码的。在某些应用程序中,您可能需要通过 JSON 属性注入有效负载。在这种情况下,有效负载将变成'\"{\r;$Foo}\n$Foo \\xYZ\u0000

确定处理哪些字符

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

  • this.category== '''

如果这会导致原始响应发生变化,这可能表明''字符破坏了查询语法并导致语法错误。您可以通过在输入中提交一个有效的查询字符串来确认这一点,例如转义引号:

  • this.category== '\''

如果这不会导致语法错误,则可能意味着应用程序容易受到注入攻击。

确认条件行为

检测到漏洞后,下一步就是确定能否使用 NoSQL 语法影响布尔条件。
要测试这一点,请发送两个请求,一个带假条件,一个带真条件。例如,您可以使用条件语句' && 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

如果应用程序的表现不同,则表明假条件会影响查询逻辑,而真条件不会。这表明注入这种语法会影响服务器端查询。

凌驾于现有条件之上

既然已经确定可以影响布尔条件,就可以尝试覆盖现有条件来利用漏洞。例如,您可以注入一个总是求值为 true 的 JavaScript 条件,如``'||'1'=='1`:

https://insecure-website.com/product/lookup?category=fizzy%27%7c%7c%27%31%27%3d%3d%27%31

这将导致以下 MongoDB 查询:

this.category == 'fizzy'||'1'=='1'

由于注入的条件始终为真,因此修改后的查询会返回所有项目。这样,您就可以查看任何类别中的所有产品,包括隐藏或未知类别。

警告

在 NoSQL 查询中注入总是求值为 “true ”的条件时要小心。虽然在注入的初始上下文中这可能是无害的,但应用程序在多个不同查询中使用来自单个请求的数据是很常见的。例如,如果应用程序在更新或删除数据时使用它,就可能导致意外的数据丢失。

检测 MongoDB 中的语法注入-靶场

靶场地址:https://portswigger.net/web-security/nosql-injection/lab-nosql-injection-detection

NoSQL数据库注入原理与实践插图1
NoSQL数据库注入原理与实践插图2


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

应急响应:Windows服务器靶机门罗币挖矿应急处理流程
浅谈目录权限导致的文件劫持
海外的bug-hunters,不一样的403bypass
java代码审计 | struts2框架路由详解
电子数据取证 | 一次电子数据取证的尝试与反思
结合ppid欺骗和远线程注入实现dll挖空

发布评论