描述
敌人目标软件构造NoSQL语句根据用户输入或参数容易操作符替换为了达到各种技术的影响,如升级特权,绕过身份验证,和/或执行代码。
扩展描述
NoSQL数据库调用都写在一个应用程序的编程语言,通过一个自定义的API调用,或在一个共同的约定格式(例如,JSON、XML等),任何的对手可以利用来实现上述目标。NoSQL攻击通常由于不适当的卫生处理和验证的数据来源于用户,通过特殊字符或JavaScript注入。在这两种情况下,对手工艺品输入字符串,这样当目标软件构造NoSQL语句根据输入,生成的NoSQL语句执行行动目的以外的其他应用程序。然而,不像传统的SQL注入攻击,NoSQL注入攻击也可以发生在实例的应用程序不依赖于用户输入,在运营商更换一样。这需要对手覆盖保留NoSQL变量名与那些与恶意修改功能(例如,在MongoDB美元)。在所有情况下,根据使用NoSQL API和数据模型,成功注射会导致信息披露,数据修改,代码在应用程序级别执行。
注意:NoSQL注入攻击执行在一个过程语言(如C、c++、Perl),而不是声明的SQL语言本身。因此,NoSQL注入攻击可能会导致更大的影响比传统SQL注入攻击(ref - 668]。
攻击的可能性
典型的严重性
执行流程
探索
调查目标应用程序:由于可用NoSQL数据库的数量和众多语言/ API的组合,对手必须首先调查目标应用程序了解技术正在杠杆以及他们如何与用户驱动的数据交互。
技术 |
确定目标应用程序的技术堆栈杠杆,如应用服务器、司机、框架、api和数据库被利用。 |
识别领域的应用程序与用户输入和交互可能参与NoSQL查询。 |
实验
识别用户可控输入容易注入:后确定所使用的技术栈和用户驱动的输入是杠杆,确定用户可控输入容易注入如身份验证或搜索表单。为每个用户可控输入对手怀疑是容易NoSQL注入,试图注入具有特殊意义的字符或关键字在给定的NoSQL数据库或语言(例如,“美元ne MongoDB或PHP / MongoDB的“美元存在”),或者可以在应用程序中执行JavaScript。我们的目标是创建一个NoSQL查询与无效的语法。
技术 |
使用web浏览器将输入文本字段或通过HTTP GET参数。 |
使用一个web应用程序调试工具如篡改数据,TamperIE, WebScarab,等等。修改HTTP POST参数,隐藏字段,non-freeform字段等。 |
使用网络级数据包注入工具如netcat注入输入 |
使用修改客户端(由逆向工程修改)注入输入。 |
实验NoSQL注入漏洞:在确定一个给定的输入很容易受到NoSQL注入,假设底层查询是什么样子。反复尝试添加逻辑查询从数据库中提取信息,修改/删除信息在数据库中,或在服务器上执行命令。
技术 |
使用公共资源(如OWASP的“NoSQL注入测试”ref - 668]或空扫的“NoSQL注入备忘单”(ref - 669)和尝试不同的方法来添加逻辑NoSQL查询。 |
迭代逻辑添加到NoSQL查询和使用详细的错误消息从服务器调试查询。 |
尝试一个HTTP参数污染攻击来取代特定于语言的关键字,如“哪里”在PHP (capec - 460]。 |
利用
利用NoSQL注入漏洞:提炼和添加各种逻辑NoSQL查询后,工艺和执行底层NoSQL查询将被用于攻击目标系统。
先决条件
意识到目标应用程序所使用的技术堆栈。 |
NoSQL查询应用程序使用的存储、检索、或修改数据。 |
用户可控输入不正确验证应用程序的一部分,NoSQL查询。 |
目标可能容易操作符替换攻击。 |
技能要求
(等级:低) 关键字和JavaScript注入攻击,是相当简单的人基本的NoSQL知识执行NoSQL注入,一旦确定目标的技术堆栈。 |
(级别:中等) 操作符替换攻击,对手也必须有知识的HTTP参数污染攻击和如何进行。 |
所需资源
指标
太多的错误或无效的查询到数据库,特别是那些畸形造成的输入。 |
执行查询或命令,似乎恶意性质或来自不受信任的源。 |
后果
这个表指定不同的个体与攻击模式相关的后果。范围确定违反了安全属性,而影响了负面的技术影响,如果敌人成功的攻击。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能有高可能性模式将被用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
完整性 |
修改数据 |
|
保密 |
读取数据 |
|
保密
完整性
可用性 |
执行未经授权的命令 |
|
保密
访问控制
授权 |
获得特权 |
|
缓解措施
强大的输入验证,所有用户可控的输入必须验证和过滤非法字符以及相关的NoSQL和JavaScript的内容。NoSQL-specific关键词,如美元ne、情商或gt MongoDB,美元必须过滤除了人物如单引号(')或分号(;)基于上下文的出现。验证也应该扩展到预期的类型。 |
如果可能的话,利用安全api(例如,PyMongo和Flask-PyMongo Python和MongoDB查询而不是构建查询字符串。 |
确保NoSQL数据库的最新版本和相应的API所使用的应用程序。 |
使用自定义的错误页面,对手可以收集信息的本质从描述性查询错误消息。输入验证必须加上自定义的错误页面,通知一个错误没有披露信息数据库或应用程序。 |
运动最小特权原则对于应用程序账户减少损失如果NoSQL注入攻击成功。 |
如果使用MongoDB,禁用服务器端JavaScript执行和利用卫生处理模块,如“mongo-sanitize”。 |
如果使用PHP与MongoDB,确保所有特殊查询操作符($)开始使用单引号,以防止操作符替换攻击。 |
额外的缓解措施将取决于NoSQL数据库,API,应用程序和编程语言的杠杆。 |
例子,实例
下面的例子主要引用MongoDB、PHP和NodeJS攻击由于他们的声望和知名度。然而,请注意,这些攻击是不排斥这个NoSQL实例,编程语言,或者运行时框架。 通过MongoDB NodeJS内,登录旁路攻击是可能的如果没有正确地验证用户输入和消毒ref - 670]。
/ / NodeJS Express.js
db.collection(“用户”);({
“用户”:req.query.user, “密码”:req.query.password });
上面的代码没问题如果用户提交查询如下: https://example.org/login?user=patrick&password=1234
但是敌人可能提交恶意查询如以下,这将是由代码解释如下: https://example.org/login?user=patrick&password [ne美元]=
/ / NodeJS Express.js
db.collection(“用户”);({
“用户”:鲍勃, “密码”:{"不":" "} });
这将导致一个登录旁路攻击,作为所有值的查询会成功,鲍勃的密码不是一个空字符串。 |
MongoDB实例也容易JavaScript注入攻击当用户输入不正确验证和消毒。
/ / PHP与MongoDB
db.collection。找到({$地点:函数(){
返回(这。用户名= = $ username)}});
如果用户正确地指定一个用户名,那么这段代码将执行。然而,敌人可以“用户名”美元注入JavaScript变量实现NoSQL注入攻击如下:
/ / PHP与MongoDB
db.collection。找到({$地点:函数(){
返回(这。用户名= =“foo”;睡眠(5000))}});
这将导致服务器睡5秒如果攻击成功。敌人可以提供一个大的值拒绝服务应用程序。 |
如果利用PHP与MongoDB,操作符替换攻击是可能的如果不妥善处理特殊的查询操作符。下面的例子从OWASP的“NoSQL注入测试”将显示一个简单的如何这可能发生。ref - 668]
db.myCollection。找到({$地点:函数(){
返回obj。信用——obj.debits < 0;}});
尽管上面的查询不依赖于任何用户输入,通过运营商NoSQL注入攻击是脆弱的“美元”关键字替换。在这种情况下,对手可以利用MongoDB在以下方式:
地点:美元函数(){/ /这里任意JavaScript} |
引用
内容的历史
提交 |
提交日期 |
提交者 |
组织 |
2021-10-21
(版本3.6) |
CAPEC内容团队 |
manbetx客户端首页 |
|
修改 |
修改日期 |
修饰符 |
组织 |
2022-09-29
(版本3.8) |
CAPEC内容团队 |
manbetx客户端首页 |
更新Example_Instances |
|