NoSql注入小测试。

在传统的 SQL 注入中,攻击者会尝试破坏 SQL 查询语句并在服务器端修改查询语句。使用 NoSQL 注入,攻击可以
在应用程序的其他区域中执行,而不是在传统的 SQL 注入中执行。此外,在传统的 SQL 注入中,攻击者会使用一个
标记来发起攻击。在 NoSQL 注入中,在NoSQL注入中,通常存在将字符串解析或评估为NoSQL调用的漏洞。
NoSQL 注入中的漏洞通常在以下情况下发生:(1)端点接受的 JSON 数据是从 NoSQL 数据库中请求的,以及
我们能够使用 NoSQL 比较运算符操作查询来更改 NoSQL 查询。
NoSQL 注入的一个常见例子是注入类似的东西: [{"$gt":""}] 。这个 JSON 对象基本上是说运算符( $gt )大于
NULL("")。由于逻辑上一切都大于 NULL,因此 JSON 对象成为一个真正正确的语句,允许我们绕过或注入 NoSQL
查询。这相当于 SQL 注入世界中的[' or 1=1—]。在 MongoDB 中,我们可以使用以下条件运算符之一:
(>)大于 - $gt
(<)小于 - $lt
(>=)大于等于 - $gte
(<=)小于等于 - $lte
测试:

 

发现注入点没有做什么防护,测试一下语句,在password处修改{"$gt" : ""}}(自己去百度这个含义)

 

 测试2:

 

Node.js 有一个 qs 模块,它具有将 HTTP 请求参数转换为 JSON 对象的特定语法。默认情况下,qs 模块在 Express
中使用“body-parser”中间件的一部分。
qs 模块:一个查询字符串解析和字符串化库,增加了一些安全性。[https://www.npmjs.com/package/qs]
如果使用 qs 模块,如果在参数中使用括号表示法,POST 请求将在服务器端转换为 JSON。因此,看
起来像用户名 [value] = admin&password [value] = admin 的 POST 请求将转换为 {"username":
{"value":"admin"},"password":{"value":"admin" }} 。
这个NoSql使用了qs模块所以可能刚开始的注入方法不好用,我们可以测试一下这个方法。

 

 测试一下,能不能转换为正常的。

 

 失败,重新构造payload

 

再次构建新的payload

 

 

 

 

发现自己符号写错了。。最后还是成功了。

总结一下:NoSql注入大多是利用符号来做绕过,这个类似于关系型数据库中的万能密码,or之类的。。

后续看一下能不能爆出数据之类的。

 

 

posted @ 2019-11-22 19:04  wudixiaoherry  阅读(333)  评论(0编辑  收藏  举报