我正在尝试调查在Ruby on Rails上是否可以使用mongo和mongoid gem进行nosql注入。
我使用包含Mongoid::Document
的Mongo::Client
集合和模型来处理Mongodb的请求。
我试图传递一些命令字符,比如' " \ ; { }
,但是它被清理了。传递GET search?title[$ne]=foo
是像{"title"=>"{\"$ne\"=>\"foo\"}"}
一样训练的,所以在这里看起来不是什么问题。
如果我使用此技术堆栈的普通方法,是否可以进行任何nosql注入?
发布于 2021-10-26 18:55:39
有可能,但很容易被忽视。
事实上,你已经很接近了。
非信任源不仅仅来自GET参数。
Mongoid对您没有任何帮助;在您的示例中,阻止成功利用的原因是,在RoR中,您不能将Hash
作为GET参数传递。
未清理的参数可以来自JSON,比如下面这个。
posts = PrivatePost.where({ owner_id: json_params[:owner_id] }).each.to_a
其中json_params[:owner_id]
可以包含{ '$ne': 'the owner' }
,
这可能会将posts
泄露给其他人。
或者通过POST-based打乱操作范围:
Post.where({ _id: json_params[:id] }).delete_all
https://stackoverflow.com/questions/56140931
复制相似问题