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

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

缺陷编号:wooyun-2014-075818

漏洞标题:Maccms V8 最新版SQL注入(无视GPC)

相关厂商:maccms.com

漏洞作者: xiaoL

提交时间:2014-09-15 16:04

修复时间:2014-12-14 16:06

公开时间:2014-12-14 16:06

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-15: 细节已通知厂商并且等待厂商处理中
2014-09-15: 厂商已经确认,细节仅向厂商公开
2014-09-18: 细节向第三方安全合作伙伴开放
2014-11-09: 细节向核心白帽子及相关领域专家公开
2014-11-19: 细节向普通白帽子公开
2014-11-29: 细节向实习白帽子公开
2014-12-14: 细节向公众公开

简要描述:

官网刚下的程序,确认不重复。利用起来特别有意思。

详细说明:

苹果CMS使用be函数来获取参数

function be($mode,$key,$sp=',')
{
ini_set("magic_quotes_runtime", 0);
$magicq= get_magic_quotes_gpc();
switch($mode)
{
case 'post':
$res=isset($_POST[$key]) ? $magicq?$_POST[$key]:@addslashes($_POST[$key]) : '';
break;
case 'get':
$res=isset($_GET[$key]) ? $magicq?$_GET[$key]:@addslashes($_GET[$key]) : '';
break;
case 'arr':
$arr =isset($_POST[$key]) ? $_POST[$key] : '';
if($arr==""){
$value="0";
}
else{
for($i=0;$i<count($arr);$i++){
$res=implode($sp,$arr);
}
}
break;
default:
$res=isset($_REQUEST[$key]) ? $magicq ? $_REQUEST[$key] : @addslashes($_REQUEST[$key]) : '';
break;
}
return $res;
}


其中arr方法没有过滤,因此开始找一个arr的点。终于找到一个能利用的。
在admin\tpl\module\art.php文件中存在

elseif($method=='typesaveall')
{
$t_id = be('arr','t_id'); //使用了arr方法
$ids = explode(',',$t_id);
foreach($ids as $id){
$t_name = be('post','t_name' .$id);
$t_enname = be('post','t_enname' .$id) ;
$t_sort = be('post','t_sort' .$id);
$t_tpl = be('post','t_tpl' .$id);
$t_tpl_art = be('post','t_tpl_art' .$id);

if (isN($t_name)) { $t_name='未知';}
if (isN($t_enname)) { $t_enname='weizhi';}
if (!isNum($t_sort)) { $t_sort=0;}
if (isN($t_tpl)) { $t_tpl = 'artlist.html';}
if (isN($t_tpl_art)) { $t_tpl_art = 'art.html';}

$db->Update ('{pre}art_type',array('t_name','t_enname', 't_sort','t_tpl','t_tpl_art'),array($t_name,$t_enname,$t_sort,$t_tpl,$t_tpl_art),'t_id='.$id); //最终带入了sql语句中。
}
updateCacheFile();
redirect( getReferer() );
}

漏洞证明:

这个点比较有意思的就是虽然带入了语句,但是是update的类型,最后使用盲注。
但是又不能使用逗号,经过多方咨询终于搞定。
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring
substring方法存在
类似:
SELECT SUBSTRING('Sakila' FROM -4 FOR 2);这样的方法即可不适用逗号
使用ord避免了单引号出现。
最后利用
or 1 = (select ord(substring(user() from 1 for 1))=114)-- 1;
来判断是否成功。
初始下

7777.png


插入语句

8888.png


这里必须多条更新,插入到最后一条中,这样or成立,标签1就会被重置。就判断成功了。

修复方案:

arr方法过滤

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-09-15 20:34

厂商回复:

利用起来有一定的前提,需要进入后台。确认此问题,稍后改进。

最新状态:

暂无