当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-086474

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

相关厂商:ruby-china.org

漏洞作者: 0x_Jin

提交时间:2014-12-09 14:14

修复时间:2014-12-09 14:23

公开时间:2014-12-09 14:23

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:厂商已经修复

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-12-09: 细节已通知厂商并且等待厂商处理中
2014-12-09: 厂商已经确认,细节仅向厂商公开
2014-12-09: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

之前drops里的文章已经抛砖引玉了,然后自己之前用node.js + mongodb 也开始本地练习了起来,于是跟小伙伴 alsotang 一起发现了一些比较大的网站也存在这样的问题

详细说明:

首先mongodb 的注入如果把查询字符串当做变量值传进去的话是不会造成问题的。
可是传入参数名可控,再获取传入参数的时候会出现一个问题。
http://www.baidu.com/index?username[$ne]=x
如果获取username 然后进入到了mongodb查询的话 是会显示username不为x的值的
下面这篇文章的作者已经说:这是PHP可以传递数组参数的一个特性。其实不然,其他语言也可以。
http://drops.wooyun.org/tips/3939

QQ20141209-1.jpg


这是本地测试环境,node.js+mongoose+mongodb 可以看到也解析成了多维数组并且mongodb的运算符也插入进去了 最后的查询结果也都是username 不是x的值。
既然前面铺垫完了,现在开始进入正题:
Ruby-China的发帖API的身份验证是采用的token,每个人一个token值。
现在看下图 调用发帖的api,设置好帖子标题 内容 以及id 关键的身份验证的token处改成 $gt 操作符
$gt 是干嘛的呢? 请看mongodb的介绍:http://docs.mongodb.org/manual/reference/operator/query/

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


帖子URL:https://ruby-china.org/topics/23093

漏洞证明:

首先mongodb 的注入如果把查询字符串当做变量值传进去的话是不会造成问题的。
可是传入参数名可控,再获取传入参数的时候会出现一个问题。
http://www.baidu.com/index?username[$ne]=x
如果获取username 然后进入到了mongodb查询的话 是会显示username不为x的值的
下面这篇文章的作者已经说:这是PHP可以传递数组参数的一个特性。其实不然,其他语言也可以。
http://drops.wooyun.org/tips/3939

QQ20141209-1.jpg


这是本地测试环境,node.js+mongoose+mongodb 可以看到也解析成了多维数组并且mongodb的运算符也插入进去了 最后的查询结果也都是username 不是x的值。
既然前面铺垫完了,现在开始进入正题:
Ruby-China的发帖API的身份验证是采用的token,每个人一个token值。
现在看下图 调用发帖的api,设置好帖子标题 内容 以及id 关键的身份验证的token处改成 $gt 操作符
$gt 是干嘛的呢? 请看mongodb的介绍:http://docs.mongodb.org/manual/reference/operator/query/

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


帖子URL:https://ruby-china.org/topics/23093

修复方案:

严格过滤参数

版权声明:转载请注明来源 0x_Jin@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-12-09 14:16

厂商回复:

已处理,最近还得检查一下其他地方是否有类似的问题。

最新状态:

2014-12-09:已修复