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

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

缺陷编号:wooyun-2014-069779

漏洞标题:qibocms 多个系统同一原因的sql注入

相关厂商:齐博CMS

漏洞作者: ′雨。

提交时间:2014-07-28 10:25

修复时间:2014-10-26 10:26

公开时间:2014-10-26 10:26

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

因为qibocms 拥有很多系统。
看了看昨天发的那个洞 今天再下载了几个qibo其他的系统 发现有一部分系统存在该洞。
鉴于之前qibocms打补丁的时候总是打了几个系统 而遗漏了其他几个系统。
就把存在这洞的系统全部一个一个的写出来。

详细说明:

统一来看看全局文件

$_POST=Add_S($_POST);
$_GET=Add_S($_GET);
$_COOKIE=Add_S($_COOKIE);


function Add_S($array){
foreach($array as $key=>$value){
if(!is_array($value)){
$value=str_replace("&#x","& # x",$value); //过滤一些不安全字符
$value=preg_replace("/eval/i","eva l",$value); //过滤不安全函数
!get_magic_quotes_gpc() && $value=addslashes($value);
$array[$key]=$value;
}else{
$array[$key]=Add_S($array[$key]);
}
}
return $array;
}


判断是否开启gpc 如果off 就用addslashes来过滤数组中的value
没有过滤数组中的key。
0x01 新闻系统
news/member/post.php中

elseif($job=='manage')
{
if(!$atc_power)showerr("你没权限");
if($rsdb[pages]<2){
header("location:post.php?job=edit&aid=$aid");exit;
}
if($step==2){
asort($orderDB);
$i=0;
foreach( $orderDB AS $key=>$value){
$i++;
$db->query("UPDATE {$_pre}reply SET orderid=$i WHERE aid='$aid' AND rid='$key'");
}
refreshto("$FROMURL","排序成功",1);
}


对数组中的key循环出来后 无过滤直接带入到了update语句中所以造成了注入。
—————————————————————————————————————
0x02 图片系统
在 photo\member\post.php中

elseif($job=='manage')
{
if(!$atc_power)showerr("你没权限");
if($rsdb[pages]<2){
header("location:post.php?job=edit&aid=$aid");exit;
}
if($step==2){
asort($orderDB);
$i=0;
foreach( $orderDB AS $key=>$value){
$i++;
$db->query("UPDATE {$_pre}reply SET orderid=$i WHERE aid='$aid' AND rid='$key'");
}
refreshto("$FROMURL","排序成功",1);
}


也是一样的原因 循环出来后没有对$key过滤 直接带入到查询。
0x03 视频系统
video/member/post.php中

elseif($job=='manage')
{
if(!$atc_power)showerr("你没权限");
if($rsdb[pages]<2){
header("location:post.php?job=edit&aid=$aid");exit;
}
if($step==2){
asort($orderDB);
$i=0;
foreach( $orderDB AS $key=>$value){
$i++;
$db->query("UPDATE {$_pre}reply SET orderid=$i WHERE aid='$aid' AND rid='$key'");
}
refreshto("$FROMURL","排序成功",1);
}


也是一样的原因 循环出来后没有对$key过滤 直接带入到查询。
_____________________________________________________________________
0x04 博客系统
/blog/require/ajax/edit_sort.php中

if($action == "update"){
foreach($name AS $key=>$value){
$db->query("UPDATE `{$pre}blog_{$type}_album` SET name='$value' WHERE uid='$lfjuid' AND id='$key'");
}


这里跟之前的代码还有点不同 不过一样没过滤 造成注入。
/blog/member/update_sort.php

if($action == "update"){
foreach($name AS $key=>$value){
$db->query("UPDATE `{$pre}blog_{$type}_album` SET name='$value' WHERE uid='$lfjuid' AND id='$key'");
}


博客系统中这样的很多 。
博客系统 第三弹
/blog/require/ajax/friendlink.php

if($act=='modify')
{
foreach($name AS $key=>$value){
if($value!=$_name[$key]||$url[$key]!=$_url[$key]){
$url[$key]=filtrate($url[$key]);
$value=filtrate($value);
$db->query("UPDATE {$pre}blog_friendlink SET name='$value',url='{$url[$key]}' WHERE uid='$lfjuid' AND id='$key'");
}
}
job_end($job);
}

漏洞证明:

25.jpg


都是同一原因的 随便找个系统演示就行了。

修复方案:

我看这些都是起的数字的作用
$key=intval($key);

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-07-28 12:19

厂商回复:

感谢提出来

最新状态:

暂无