当前位置: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:已修复


漏洞评价:

评论

  1. 2014-12-09 10:14 | 进击的zjx ( 普通白帽子 | Rank:295 漏洞数:61 | 工作需要,暂别一段时间)

    jin神20号要来南京讲座啊?我去捧场

  2. 2014-12-09 10:21 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    果精~

  3. 2014-12-09 10:26 | 0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999)

    @进击的zjx 好啊~

  4. 2014-12-09 10:28 | 0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999)

    @gainover 哈哈哈 二哥你说精华果然就精华了,现在得找点登陆相关的注入去弄个登陆任意账号啥的 或者找些php用Mongodb的站去像mysql sqlserver那样玩注入也行

  5. 2014-12-09 10:57 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    闪电

  6. 2014-12-09 11:42 | Black_Sun ( 路人 | 还没有发布任何漏洞 | 黑色阳光时刻照耀着我们)

    大神啊!!!

  7. 2014-12-09 13:54 | 龍 、 ( 普通白帽子 | Rank:398 漏洞数:135 | 你若安好 我就是晴天)

    果精

  8. 2014-12-09 14:01 | 寂寞的瘦子 ( 普通白帽子 | Rank:242 漏洞数:53 | 一切语言转汇编理论)

    ru撸bi逼,林心如的男朋友打一门编程语言。。

  9. 2014-12-09 14:20 | 0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999)

    @寂寞的瘦子 林心如的男朋友是程序猿?

  10. 2014-12-09 15:01 | Sogili ( 普通白帽子 | Rank:129 漏洞数:27 )

    不错哎,用nodejs做开发每次都得写个中间件过滤下object参数。

  11. 2014-12-09 15:04 | 0x_Jin ( 普通白帽子 | Rank:319 漏洞数:37 | 微博:http://weibo.com/J1n9999)

    @Sogili 把你那个中间件共享下吧 233333

  12. 2014-12-09 15:07 | 秋风 ( 普通白帽子 | Rank:438 漏洞数:44 | 码农一枚,关注互联网安全)

    NB!

  13. 2014-12-09 15:47 | 机器猫 ( 普通白帽子 | Rank:1141 漏洞数:253 | 爱生活、爱腾讯、爱网络!)

    厂商给力!

  14. 2014-12-09 15:55 | chock ( 实习白帽子 | Rank:58 漏洞数:15 | 今夜我们都是wooyun人,我们一定要收购长亭)

    mongodb注入实例,果精

  15. 2014-12-09 16:52 | 寂寞的瘦子 ( 普通白帽子 | Rank:242 漏洞数:53 | 一切语言转汇编理论)

    @0x_Jin 好洞,林心如的英文名叫ruby,他老公可以ruby(撸逼)

  16. 2014-12-11 11:56 | 黑色的屌丝 ( 路人 | Rank:27 漏洞数:5 | →_→→_→)

    $gte 大于等于$gt 大于

  17. 2014-12-11 17:17 | 脚本小伙 ( 实习白帽子 | Rank:52 漏洞数:15 | 小书童)

    @0x_Jin 专业js三十年

  18. 2015-03-17 13:36 | pandas ( 普通白帽子 | Rank:585 漏洞数:58 | 国家一级保护动物)

    有意思..