网站地图    收藏   

主页 > 后端 > 网站安全 >

qibocms 多个系统同一原因的sql注入 - 网站安全 -

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

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

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

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论