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

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

缺陷编号:wooyun-2015-0150352

漏洞标题:海盗云商 最新版密码重置漏洞

相关厂商:www.haidao.la

漏洞作者: xiao.k

提交时间:2015-11-02 16:29

修复时间:2015-12-17 14:48

公开时间:2015-12-17 14:48

漏洞类型:非授权访问/权限绕过

危害等级:高

自评Rank:15

漏洞状态:厂商已经修复

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

因为逻辑判断的问题,导致任意用户可被重置密码

详细说明:

漏洞文件在`appliaction\Controller\User\PublicController.class.php`,197-235行

/*通过邮件找回密码*/
public function setrepwd(){
if(IS_POST){
$id = (int)$_POST['id'];
if ($id < 1) showmessage('您的信息有误');
$passowrd = trim($_POST['password']);
$passowrd1 = trim($_POST['password1']);
if (!$passowrd) showmessage('请输入新密码',U('User/Public/setrepwd',array('repwd_key'=>$_POST['repwd_key'])));
if (!$passowrd1) showmessage('请输入确认密码',U('User/Public/setrepwd',array('repwd_key'=>$_POST['repwd_key'])));
if ($passowrd != $passowrd1) showmessage('两次输入的密码不一致',U('User/Public/setrepwd',array('repwd_key'=>$_POST['repwd_key'])));
$userinfo = model('user')->find($id);
if ($userinfo['email'] != $_POST['email']) showmessage('您的信息有误,请重新获取链接',U('User/Public/repwd'));
if ($_POST['repwd_key'] != $userinfo['repwd_key']) showmessage('找回密码的链接无效,请重新获取',U('User/Public/repwd'));
$data = array();
$data['id'] = $id;
$data['valid'] = random(10);
$data['password'] = md5($data['valid'].$_POST['password']);
$data['repwd_key'] = NULL;
$r = model('user')->save($data);
if(!$r) showmessage('找回密码失败,请重新找回!',U('User/Public/repwd'));
showmessage('密码已经成功更改,请重新登录!',U('User/Public/login'),1);
}else{
..... 省略无关代码 ......
}
}


当我们需要重置密码时,我们需要提交用户的id、用户的邮箱地址和我们要设置的密码,以及`repwd_key`。用户的id和用户邮件都比较好搞定。我们主要关注`repwd_key`。
当新用户注册完成时,实际上`repwd_key`这个字段是为空的。如下图:

用户截图.JPG


那么当我提交的`repwd_key`为空时,自然也满足校验的条件。

if ($_POST['repwd_key'] != $userinfo['repwd_key']) showmessage('找回密码的链接无效,请重新获取',U('User/Public/repwd'));


当条件都满足时,即可进行重置密码。

漏洞证明:

任意密码重置漏洞.JPG

修复方案:

判断 `$_POST['repwd_key']` 是否为空

版权声明:转载请注明来源 xiao.k@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2015-11-03 13:18

厂商回复:

感谢关注,我们会立即着手修复。

最新状态:

2016-01-21:本漏洞已处理,我们会在新版发布时更新此补丁。