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

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

缺陷编号: WooYun-2015-94368

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

相关厂商: cmseasy

漏洞作者: menmen519

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

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

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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:



code 区域
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();







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

code 区域
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



当然是订单表的东西了



我们看看;

code 区域
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

厂商回复:

谢谢

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2015-01-31 00:49 | sco4x0 ( 实习白帽子 | Rank:31 漏洞数:14 | 身高两米)
    0

    咋全都是1分啊?

  2. 2015-02-03 16:30 | 君宝 ( 路人 | Rank:19 漏洞数:4 | 不要跟我比浪。。你浪不过我。。)
    0

    1rank....

  3. 2015-02-05 10:07 | 蛇精病 ( 路人 | Rank:23 漏洞数:10 | 你连棒棒糖都没有,还谈什么狗屁爱情?)
    0

    @疯狗 看 又一分

  4. 2015-02-05 19:07 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    0

    @蛇精病 这厂商。。。

  5. 2015-04-29 11:59 | 冰封的心 ( 路人 | Rank:27 漏洞数:3 | 会免杀、会搞基、会3P.....)
    0

    看了这厂商的所有漏洞,给的rank都低的吓人,这厂商绝逼是醉了.....

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