我开始学习 MongoDB 并且很好奇它是否容易受到类似于SQLi的某种类型的注入攻击。由于数据库的性质,我不认为你可以注入它但是......还有哪些其他类型的攻击可以用来对付 MongoDB?
与 MongoDB 相比,可以使用哪种类型的攻击?
MongoDB 也不应该对公众进行评估。它可以受密码保护,并且可以暴力破解密码。Client-Side js 可以直接与 MongoDB 通信,MongoDB 可以对单个用户进行身份验证。然而,他们的身份验证系统过于简单,在实践中我只看到这种设计失败。
存在针对 MongoDB 的注入攻击,但通过使用适当的数据适配器库可以大大缓解这些攻击。尽管如此,值得知道可以通过几种方式注入。
您必须注意的第一件事是$where
使用用户输入使用 JavaScript 动态构建 a 的情况。通过修改他们的输入,他们可能能够改变您的查询。您必须处理的第二个问题是注入运算符$or
(或此类运算符的参数),它可以改变查询的行为。这两种情况都可以通过不使用连接样式的方法来缓解,而是使用适用于数据结构(例如 JSON)的库。
也可以转义$
运算符之前的 ,以提供替代运算符。如果其中使用了用户数据,请确保您正确地转义了密钥。
总而言之,对于任何对安全至关重要的东西,我都会避免使用 NodeJS 之类的东西。它的设计并未考虑任何形式的安全性,而且它是一个年轻的项目。如果您使用不同语言的 MongoDB,那很好。
有关更多详细信息,请参阅MongoDB 的常见问题解答。
第一个类似于 sql 注入的漏洞也可以在 mongodb 或 nosql 数据库中完成。这将是 mongodb 注入。
尝试在不同的端口上运行 mongodb,而不是在默认的 27017 上运行以避免暴露。对于官方安全实践,您可以随时查看http://docs.mongodb.org/manual/administration/security/
它告诉应该与 mongodb 服务器一起使用的安全实践。
MongoDB注入:
它在这里为 php 完整描述了如果客户端数据未正确过滤,mongodb 注入如何在 phpwebapp 中发生。也是mongodb注入的解决方案
http://www.idontplaydarts.com/2010/07/mongodb-is-vulnerable-to-sql-injection-in-php-at-least/
Mongodb空字节注入攻击
http://www.idontplaydarts.com/2011/02/mongodb-null-byte-injection-attacks/
这也是本网站上写得很好的一种攻击,看看如何使用这种方法覆盖mongo集合中的某些字段,这可以在任何webapp中完成。
NoSQLMap 工具包含许多直接针对 MongoDB 的功能。
https://github.com/tcstool/NoSQLMap
有一个更好的视频可以显示各种攻击。
您还会发现 NoSQLMap 调用了 metasploit 框架,例如,exploit/linux/misc/mongod_native_helper
该项目还建议观看此 DEF CON 演讲——https: //www.defcon.org/images/defcon-21/dc-21-presentations/Chow/DEFCON-21-Chow-Abusing-NoSQL-Databases.pdf
另一个工具是 Nosql Exploitation Framework
https://github.com/torque59/Nosql-Exploitation-Framework
还有一个在 GitHub 上——https: //github.com/cyberpunkych/attacking_mongodb
事实证明,MongoDB 有一些不好的默认设置(例如,匿名访问、/var/mongo/f.txt 或默认文件位置等)、容易猜到但已修改的设置、经典问题以及网络问题。