Author:Yaseng

Team:CodePlay

易通企业网站系统(cmseasy) 权限提升 & getShell通杀漏洞

对于cmseasy这样 比较成熟 用户量大的cms   普通的 sql injection  xss  已然被人搞烂

发现管理和前台普通用户在一个表   就可以干很多猥琐之事了    额  先看代码吧

注册 用户  此时的代码为

文件: user_act.php

function edit_action() {
  if(front::post('submit')) {
        $this->_user->rec_update(front::$post,'userid='.$this->view->user['userid']);
        front::flash(lang('修改资料成功!'));
        front::redirect(url::create('user/index'));
    }
    $this->view->data=$this->view->user;
}

继续跟踪rec_update函数

function rec_update($row,$where) {
    $tbname=$this->name;
    $sql=$this->sql_update($tbname,$row,$where);

    return $this->query_unbuffered($sql);
}

向下sql_update($tbname,$row,$where)    ( 漏洞函数 )

function sql_update($tbname,$row,$where) {
    $sqlud='';
    if (is_string($row))
        $sqlud=$row.' ';
    else
        foreach ($row as $key=>$value) {
            if (in_array($key,explode(',',$this->getcolslist()))) {
                $value=addslashes($value);
                if (preg_match('/^\[(.*)\]$/',$value,$match))
                    $sqlud .= "`$key`"."= ".$match[1].",";
                elseif ($value === "")
                    $sqlud .= "`$key`= NULL, ";
                else
                    $sqlud .= "`$key`"."= '".$value."',";
               }
        }
    $sqlud=rtrim($sqlud);
    $sqlud=rtrim($sqlud,',');
    $this->condition($where);
    $sql="UPDATE `".$tbname."` SET ".$sqlud." WHERE ".$where;
    return $sql;
}

循环遍历 POST  值  对用户提交的表单直接更新  没有任何判断

导致权限提升  可以直接进后台  getShell

具体利用

测试站点 http://demo.cmseasy.cn/99/  (官方演示站)

易通企业网站系统(cmseasy) 权限提升 & getShell通杀漏洞

注册用户

修改资料

使用firefox 的  tamper  添加字段  groupid

易通企业网站系统(cmseasy) 权限提升 & getShell通杀漏洞

更新之后 权限提升为管理员  网站后面加admin

易通企业网站系统(cmseasy) 权限提升 & getShell通杀漏洞

修改配置  getShell

易通企业网站系统(cmseasy) 权限提升 & getShell通杀漏洞

附  官方补丁分析

5 -16  看了一下官方补丁

官方只是吧,用户编辑资料时传入的 groupid 给删了,而没去修复,真正的罪恶之源  table.php  普通用户和 管理员还在一个表  很明显是治标不治本的  各位同仁有性趣去突破下吧

CodePlay 代码审计  交流群   209547366   (共同进步)