Spring Data MongoDB nosql 注入

Ajr*_*ris 5 java mongodb spring-data-mongodb spring-boot

我有个问题。spring 数据中 mongo 存储库中的查询是否免受 NoSQL 注入攻击?是否有可能对 spring-boot 应用程序成功执行此类攻击?例如,如果我创建了使用自己的方法扩展 MongoRepository 的接口,那么默认查询是否以安全的方式生成,这样的攻击是不可能的?谢谢

Ajr*_*ris 6

我使用一个 mongo 存储库创建了一个小型 Spring Boot 应用程序。我对其进行了一些基本的 NoSQL 注入攻击,为了确保它们有效,我还使用 Robo3T 进行了攻击,并检查输出是否符合我的预期。例如,进行如下查询:

db.getCollection('user').find({
"login":"f1", 
"password" : { '$ne': null } })
Run Code Online (Sandbox Code Playgroud)

会给我数据库中存在的具有该登录名的所有用户。我通过对 String 字段类型执行这样的 { '$ne': null } 来进行此攻击。(我还对其他类型进行了一些其他攻击,但稍后我会解释我的其他结论)正如我所想的那样,这样,它就是不可能提供我们自己的命令。Spring 只是让这个看起来像:

"password":"{ '$ne': null }"

每当我们尝试以“”结束它时,它只会将 \ 添加到我们的查询中,例如:

{ "login" : "f1", "password" : "\"end earlier\"" }
Run Code Online (Sandbox Code Playgroud)

我还检查了其他请求(主要来自这里: https: //github.com/cr0hn/nosqlinjection_wordlists/blob/master/mongodb_nosqli.txt,因为我在这里找到它https://www.owasp.org/index.php/Testing_for_NoSQL_injection,也许这些链接会对某人有所帮助),但是他们都没有成功。因此,就我而言,他们已经为 NoSQL 注入等案例做好了准备,并且确保了它的安全。但是,如果有人能够支持或不同意我的观点(基于执行的攻击)并提供更多证据或示例,我将不胜感激。谢谢。