因为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); }
漏洞证明:

都是同一原因的 随便找个系统演示就行了。
修复方案:
我看这些都是起的数字的作用
$key=intval($key);
|
还没有人抢沙发呢~