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

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

缺陷编号:wooyun-2014-081768

漏洞标题:易酷CMS可以任意修改他人密码密保漏洞

相关厂商:ekucms.com

漏洞作者: nextdoor

提交时间:2014-11-05 12:19

修复时间:2014-12-30 14:44

公开时间:2014-12-30 14:44

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

危害等级:高

自评Rank:15

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-05: 细节已通知厂商并且等待厂商处理中
2014-11-10: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-01-04: 细节向核心白帽子及相关领域专家公开
2015-01-14: 细节向普通白帽子公开
2015-01-24: 细节向实习白帽子公开
2014-12-30: 细节向公众公开

简要描述:

易酷CMS可以任意修改他人密码密保漏洞

详细说明:

版本2.5
简单的说就是个人会员修改自己的密码和密保等问题时越权而造成可以修改
其他的密码密保问题
我们先分析一下代码
viem/user/edit.html

</div>
//从这里提交参数,提交到user/update
<div class="user">
<h3>修改资料</h3>
<ul style="line-height:30px"><form action="index.php?s=User/Update" method="post" id="gxform"><input name="id" type="hidden" value="{$id}" />
<li>用户帐号:{$username}</li>
<li>用户积分:{$money}</li>
<li>联系 QQ:<input name="qq" type="text" value="{$qq}" maxlength="12"></li>
<li>原始密码:<input name="olduserpwd" type="password" /></li>
<li>修改密码:<input name="userpwd" type="password" /> 不修改请留空</li>
<li>确认密码:<input name="reuserpwd" type="password" /> 不修改请留空</li>
<li>密保问题:<input name="question" type="text" value="{$question|htmlspecialchars}" maxlength="20"/></li>
<li>密保答案:<input name="answer" type="text" value="{$answer|htmlspecialchars}" maxlength="20"/></li>
<li style="padding-top:10px"><input class="bginput" name="submit" type="submit" value="更 新" /> <input class="bginput" name="reset" type="reset" value="重 填" /></li>


跟踪user/update
core\lib\action\home\UserAction.class.php

public function update(){
$rs = D("Home.User");
if ($rs->create()) {
if (false !== $rs->save()) {
$this->assign("jumpUrl",'index.php?s=User/Login');
$this->success('用户信息更新成功,请重新登录!');
}else{
$this->error("用户信息更新失败!");
}
}else{
$this->error($rs->getError());
}
}
跟踪create()函数 //这个函数在框架中也没有做很好的防御
public function create($data='',$type='') {
// 如果没有传值默认取POST数据
if(empty($data)) {
$data = $_POST;
}elseif(is_object($data)){
$data = get_object_vars($data);
}elseif(!is_array($data)){
$this->error = L('_DATA_TYPE_INVALID_');
return false;
}
// 状态
$type = $type?$type:(!empty($data[$this->getPk()])?self::MODEL_UPDATE:self::MODEL_INSERT);
// 表单令牌验证
if(C('TOKEN_ON') && !$this->autoCheckToken($data)) {
$this->error = L('_TOKEN_ERROR_');
return false;
}
// 数据自动验证
if(!$this->autoValidation($data,$type)) return false;
// 检查字段映射
if(!empty($this->_map)) {
foreach ($this->_map as $key=>$val){
if(isset($data[$key])) {
$data[$val] = $data[$key];
unset($data[$key]);
}
}
}
// 验证完成生成数据对象
$vo = array();
foreach ($this->fields as $key=>$name){
if(substr($key,0,1)=='_') continue;
$val = isset($data[$name])?$data[$name]:null;
//保证赋值有效
if(!is_null($val)){
$vo[$name] = (MAGIC_QUOTES_GPC && is_string($val))? stripslashes($val) : $val;
}
}
// 创建完成对数据进行自动处理
$this->autoOperation($vo,$type);
// 赋值当前数据对象
$this->data = $vo;
// 返回创建的数据以供其他调用
return $vo;
}

漏洞证明:

登陆链接http://127.0.0.1:8088/ekucms/index.php?s=User/Login
在用户登陆编辑处http://127.0.0.1:8088/ekucms/index.php?s=User/Edit
我们注册一个test账号,旧密码不用填写也可以

ekucms1.PNG


更改id参数,可以写一个脚本,只需修改id参数密码和密保都一样,那么拿下
任意用户都可以了

ekucms2.PNG


id为3的密码和密保都修改了

ekucms3.PNG

修复方案:

至少修改用户的重要信息时,原密码应该验证一下吧,
验证一下是否是本人吧

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-30 14:44

厂商回复:

最新状态:

暂无