漏洞概要 关注数(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标签: 无
漏洞详情
披露状态:
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
这是本地测试环境,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/
$gt为大于等于 那么token又是验证身份的,于是 token[$gt]=123 变成了这样的语句
db.xxx.find({"token":{"$gt":123}}) 于是便返回了 所有token值大于等于123的用户。
然后发帖的时候 只取第一条记录,第一条记录肯定是管理员的,于是便可以盗用管理员的身份发帖。
证明如下:
帖子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
这是本地测试环境,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/
$gt为大于等于 那么token又是验证身份的,于是 token[$gt]=123 变成了这样的语句
db.xxx.find({"token":{"$gt":123}}) 于是便返回了 所有token值大于等于123的用户。
然后发帖的时候 只取第一条记录,第一条记录肯定是管理员的,于是便可以盗用管理员的身份发帖。
证明如下:
帖子URL:https://ruby-china.org/topics/23093
修复方案:
严格过滤参数
版权声明:转载请注明来源 0x_Jin@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:20
确认时间:2014-12-09 14:16
厂商回复:
已处理,最近还得检查一下其他地方是否有类似的问题。
最新状态:
2014-12-09:已修复