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

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

缺陷编号: WooYun-2013-37631

漏洞标题: ecmall2.x修改任意管理员和用户密码

相关厂商: ShopEx

漏洞作者: Chora认证白帽子

提交时间: 2013-09-20 17:52

公开时间: 2013-12-19 17:52

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-09-20: 细节已通知厂商并且等待厂商处理中
2013-09-22: 厂商已经确认,细节仅向厂商公开
2013-09-25: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2013-11-16: 细节向核心白帽子及相关领域专家公开
2013-11-26: 细节向普通白帽子公开
2013-12-06: 细节向实习白帽子公开
2013-12-19: 细节向公众公开

简要描述:

修改密码时未进行权限验证,顺便求个礼物...求动力- -.

详细说明:

app/find_password.php

code 区域
function set_password()
{
if (!IS_POST)
{
......
}
else //POST提交
{
if (empty($_POST['new_password']) || empty($_POST['confirm_password']))
{
$this->show_warning("unsettled_required");
return ;
}
if (trim($_POST['new_password']) != trim($_POST['confirm_password']))
{
$this->show_warning("password_not_equal");
return ;
}
$password = trim($_POST['new_password']);
$passlen = strlen($password);
if ($passlen < 6 || $passlen > 20)
{
$this->show_warning('password_length_error');

return;
}

$id = intval($_GET['id']);//虽然是过滤了,但是不影响利用.
$word = $this->_rand();
$md5word = md5($word);

$ms =& ms(); //连接用户系统
$ms->user->edit($id, '', array('password' => $password), true); //强制修改 !!问题就出在这儿,false是需要验证的,不知道程序员为什么要设置成非验证修改,偷懒也不是这么偷的吧...
if ($ms->user->has_error())
{
$this->show_warning($ms->user->get_error());

return;
}
$ret = $this->_password_mod->edit($id, array('activation' => $md5word));

$this->show_message("edit_success",
'login_in', 'index.php?app=member&act=login',
'back_index', 'index.php');
return ;
}

}



includes/passports/default.passport.php

code 区域
function edit($user_id, $old_password, $items, $force = false)
{
if (!$force) //为false时需要验证,为ture时直接跳过执行下面的操作
{
$info = $this->get($user_id);
if (md5($old_password) != $info['password'])
{
$this->_error('auth_failed');

return false;
}
}
$edit_data = array();
if (isset($items['password']))
{
$edit_data['password'] = md5($items['password']);
}
if (isset($items['email']))
{
$edit_data['email'] = $items['email'];
}

if (empty($edit_data))
{
return false;
}
//编辑本地数据
$this->_local_edit($user_id, $edit_data);//跟进

return true;
}



includes/passport.base.php

code 区域
function _local_edit($user_id, $data)
{
$model_member =& m('member');
$model_member->edit($user_id, $data);\\执行update

return true;
}





只需要POST提交new_password=123456&confirm_password=123456,当然不要忘了要修改的id,id是通过GET参数获得的.



后台拿SHELL的话,见这篇http://**.**.**.**/bugs/wooyun-2013-037510

漏洞证明:

1.jpg



2.jpg

修复方案:

改为false即可,当然第2个参数也要填写旧密码。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-09-22 11:15

厂商回复:

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

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2013-09-20 23:44 | Chora 认证白帽子 ( 普通白帽子 | Rank:377 漏洞数:25 | 生存、生活、生命。)
    1

    求组织(千万不要是党国)带走...

  2. 2013-09-24 09:55 | exploits ( 实习白帽子 | Rank:69 漏洞数:17 | As We Do,As You Know !)
    0

    @Chora 来加入基友协会吧,受老习直接领导

  3. 2013-11-01 22:49 | 再见江南 ( 路人 | Rank:4 漏洞数:2 | 维护世界和平)
    0

    id是通过GET参数获得的这是啥意思呢,通过用户名能获取id吗?

  4. 2013-11-02 10:40 | Chora 认证白帽子 ( 普通白帽子 | Rank:377 漏洞数:25 | 生存、生活、生命。)
    0

    @再见江南 你要修改哪个ID的密码,就要用GET方式提交那个ID。

  5. 2013-11-06 18:39 | 再见江南 ( 路人 | Rank:4 漏洞数:2 | 维护世界和平)
    0

    @Chora 有点不明白的地方就是如果ID是4,那他对应的用户名是什么呢,好像没办法查出来,如果对方网站有注入还能查出来,有些修改了id=1 不是admin也没办法进后台吧?

  6. 2013-12-18 11:25 | 网络流氓 ( 路人 | Rank:29 漏洞数:3 | 欢迎热爱网络安全的朋友技术交流QQ:1020471...)
    0

    测试中,修改ID=1 的ADMIN 账户,提示用户受保护。有基友遇到了这种情况了吗

  7. 2013-12-18 11:32 | 再见江南 ( 路人 | Rank:4 漏洞数:2 | 维护世界和平)
    0

    对啊,我也遇到了

  8. 2014-01-22 21:57 | Mosuan ( 普通白帽子 | Rank:449 漏洞数:175 | 尘封此号,不装逼了,再见孩子们。by Mosua...)
    0

    @网络流氓 废话,难道厂商确认了却没有修复?

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