Ruby-China Mongodb注入可导致盗用管理员(他人)身份发帖

首先mongodb 的注入如果把查询字符串当做变量值传进去的话是不会造成问题的。

可是传入参数名可控,再获取传入参数的时候会出现一个问题。

http://www.baidu.com/index?username[$ne]=x

如果获取username 然后进入到了mongodb查询的话 是会显示username不为x的值的

QQ20141209-1.jpg

这是本地测试环境,node.js+mongoose+mongodb 可以看到也解析成了多维数组并且mongodb的运算符也插入进去了 最后的查询结果也都是username 不是x的值。

既然前面铺垫完了,现在开始进入正题:

Ruby-China的发帖API的身份验证是采用的token,每个人一个token值。

现在看下图 调用发帖的api,设置好帖子标题 内容 以及id 关键的身份验证的token处改成 $gt 操作符

5)6_WO%WM`WH4$HF9U[70@6.jpg

$gt为大于等于 那么token又是验证身份的,于是 token[$gt]=123 变成了这样的语句

db.xxx.find({"token":{"$gt":123}}) 于是便返回了 所有token值大于等于123的用户。

然后发帖的时候 只取第一条记录,第一条记录肯定是管理员的,于是便可以盗用管理员的身份发帖。

QQ20141209-2.jpg

QQ20141209-3.jpg

 

修复方案:

严格过滤参数