因为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);