纵有疾风起
人生不言弃

qibocms多个系统绕过补丁继续注入及修复方法 – 网

(最后更新于2014-7-28)
附件: 安全补丁.rar (218 K) 下载次数:15582

看到更新补丁了 再来看看。

绕过这补丁 当然 绕过了这补丁的话 也是通杀qibo多个系统。

 之前发的 qibocms V7 整站系统最新版SQL注入一枚 & 另外一处能引入转义符的地方

http://www.2cto.com/Article/201410/341288. html

 

qibocms多个系统绕过补丁继续注入及修复方法 – 网插图

下载了个补丁下来看看 看了看member目录 竟然没有看到上次我发的那个post.php

我以为没做修复了呢 后来看了看全局文件 inc/common.inc.php中

 

$_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)){
$key=str_replace(array("'",'"','\\','&'),'',$key);
$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;
}

在这里 可以看到修改了这个过滤函数。

添加了一句 $key=str_replace(array(“‘”,'”‘,’\\’,’&’),”,$key);

把数组中的key 如果含有’ 或者 ” 或者 \ 清空成空。

那这样数组里面的key就不能像之前一样含有特殊符号了

看起来好像是没有问题了。 但是这里我们来测试一下。

这里我们调用一下qibocms这函数来测试一下

 

<?php
$_GET=Add_S($_GET);
var_dump ($_GET);

function Add_S($array){
foreach($array as $key=>$value){
if(!is_array($value)){
$key=str_replace(array("'",'"','\\','&'),'',$key);
$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;
}

 

qibocms多个系统绕过补丁继续注入及修复方法 – 网插图1

这里 我们再在key中加一个单引号 看看会是什么情况。

 

qibocms多个系统绕过补丁继续注入及修复方法 – 网插图2

array(2) { [“a'”]=> string(3) “asd” [“a”]=> string(3) “asd” }

可以看到 其中一个元素有了单引号。 其中一个元素没有单引号。

为什么会有两个元素了。 其实这点我根本没搞懂啊 – –

问了问P神 大概是因为 第一次循环因为单引号被清空了 所以有了一个a元素

然后就创建了一个a元素,导致数组变成了两个元素.

然后这两个元素都在这里面了。。 一个有单引号 一个无单引号。 也就是a’和a两个元素

– – 这里我还是不太懂。

但是就是这样

array(2) { [“a'”]=> string(3) “asd” [“a”]=> string(3) “asd” }

key中还是能引入单引号。

所以导致了这补丁被绕过。

______________________________________________________________________

绕过了这个 又能通杀多个系统了。 这里我就以整站系统做个演示。

继续在member/post.php

 

elseif($job=='manage')
{  
if(!$atc_power)showerr("你没权限");
if($rsdb[pages]<2){
header("location:post.php?job=edit&aid=$aid&mid=$mid&only=$only");exit;
}

$erp=get_id_table($aid);
if($step==2){
asort($orderDB);
$i=0;

foreach( $orderDB AS $key=>$value){
 
$i++;

$db->query("UPDATE {$pre}reply$erp SET orderid=$i WHERE aid='$aid' AND rid='$key'");
}
refreshto("$FROMURL","排序成功",1);

注册一个会员 然后发布文章 因为这个

if($rsdb[pages]<2){
header("location:post.php?job=edit&aid=$aid&mid=$mid&only=$only");exit;
}

所以需要发两页。

 

qibocms多个系统绕过补丁继续注入及修复方法 – 网插图3

这里我输出一下这变量 可以看到第一个没单引号 第二个有单引号

但是foreach 是循环执行的 所以第二个也能执行到。

 修复方案:

这里为什么就不参考一下之前我给的修复方法呢?

 

foreach( $orderDB AS $key=>$value){
 $key=addslashes($key);
$i++;

$db->query("UPDATE {$pre}reply$erp SET orderid=$i WHERE aid='$aid' AND rid='$key'");
}

我测试了一下 至少在这里是不能注入了的。

    上一篇: DESTOON 补丁没补好导致的注射 – 网站安全 – 自学

    下一篇: cmseasy sql注入漏洞(无视防御) – 网站安全 – 自学
未经允许不得转载:起风网 » qibocms多个系统绕过补丁继续注入及修复方法 – 网
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录