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

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

缺陷编号:wooyun-2015-094368

漏洞标题:cmseasy 管理端越权(删除 修改 添加 产品 和 订单) 不花钱你懂的

相关厂商:cmseasy

漏洞作者: menmen519

提交时间:2015-01-29 11:47

修复时间:2015-04-29 11:48

公开时间:2015-04-29 11:48

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

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

cmseasy 管理端越权(删除 修改 添加 产品 和 订单) 不花钱你懂的

详细说明:

看代码:
manage_act.php:

function init() {
$user='';
$guest = front::get('guest');
if($guest=='1'&&config::get('opguestadd')) {
$user = 'Guest';
}else {
if(cookie::get('login_username') &&cookie::get('login_password')) {
$user=new user();
$user=$user->getrow(array('username'=>cookie::get('login_username')));
}
}
if(cookie::get('login_username') &&cookie::get('login_password')) {
$guestuser=new user();
$guestuser=$guestuser->getrow(array('username'=>cookie::get('login_username')));
}
$this->view->guestuser = $guestuser;
if(!$user &&front::$act != 'login'&&front::$act != 'register') front::redirect(url::create('user/login'));
$this->view->user=$user;
$this->_user=new user;
$this->table=front::get('manage');
if($this->table <>'archive'&&$this->table <>'orders') exit('PAGE NOT FOUND!');
$this->_table=new $this->table;
$this->_table->getFields();


第一步 如果我们不是匿名用户的话

if(cookie::get('login_username') &&cookie::get('login_password')) {
$user=new user();
$user=$user->getrow(array('username'=>cookie::get('login_username')));
}


就会走到这里 看到问题了吧 cookie::get('login_password') 没有做任何参与运算的东西
直接拿到user
第二步:
我们修改cookie:login_username=admin;
我们打印一下 当前用户是什么:

64.png


看到没有超级管理员用户
下来我们看看能干什么:
case=manage&act=add&manage=archive 如果是这样的 那么archive的东西都能操作
比如list_action,add_action,edit_action,delete_action 都可以操作
case=manage&act=add&manage=orders 如果是这样的 那么也可以执行
list_action,add_action,edit_action,delete_action
当然是订单表的东西了
我们看看;

function edit_action() {
$from=session::get('from');
front::check_type(front::get('id'));
if(front::post('submit') &&$this->manage->vaild()) {
$this->manage->filter();
$info=$this->_table->getrow(front::get('id'));
if($info['userid'] != $this->view->user['userid'] ) {
front::flash('记录修改失败!(原因:未经授权!)');
header("Location: ".$from,TRUE,302);
exit;
}
if($info['checked']) {
front::flash('记录修改失败!(原因:已通过审核!)');
header("Location: ".$from,TRUE,302);
exit;
}
$this->manage->save_before();
$data=array();
$fieldlimit=$this->_table->getcols(front::$act=='list'?'user_manage':'user_modify');
$fieldlimits=explode(',',$fieldlimit);
foreach(front::$post as $key=>$value) {
if(preg_match('/(select|union|and|\'|"|\))/i',$value)){
exit('非法参数');
}
if(in_array($key,$fieldlimits))
$data[$key]=$value;
}
$update=$this->_table->rec_update($data,front::get('id'));


这里来自post的所有东西并且key 没有做unset操作 且现在具有权限了,那么我就可以任意修改订单的状态
证明,略去,只要证明目前的所有操作是在超级管理员底下即可

漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:1

确认时间:2015-01-30 20:33

厂商回复:

谢谢

最新状态:

暂无