WooYun-2014-80875:qibocms 地方门户系统 注入#4(demo测试)

漏洞作者: ′雨。认证白帽子

来源:http://www.wooyun.org/bugs/wooyun-2014-080875

简要描述

offset

详细说明

在zhuangxiu/job.php中

if(eregi("^([_0-9a-z]+)$",$job)){

    require_once(Mpath."inc/job/$job.php");

}elseif(eregi("^([_0-9a-z]+)$",$action)){

    require_once(Mpath."inc/job/$action.php");

}

包含进来

zhuangxiu\inc\job\post_img.php中

foreach( $photodb AS $key=>$value){

        if(strlen($value)>4&&!eregi("(gif|jpg|png)$",$value)){ //这里限定了value结尾必须含有jpg啥的

            showerr("只能上传GIF,JPG,PNG格式的文件,你不能上传此文件:$value");

        }

    }

    $num=0;

    foreach( $photodb AS $key=>$value ){

        $titledb[$key]=filtrate($titledb[$key]);

        $value=trim($value);

        $value=filtrate($value);

        if($titledb[$key]>100){

            showerr("标题不能大于50个汉字");

        }

        if(strlen($value)<4){

            $db->query("DELETE FROM `{$_pre}pic` WHERE pid='{$piddb[$key]}' AND id='$id'");

        }elseif($piddb[$key]){

            $num++;

            $db->query("UPDATE `{$_pre}pic` SET name='{$titledb[$key]}',imgurl='$value' WHERE pid='{$piddb[$key]}'");

        }elseif($value){

            $num++;

            $db->query("INSERT INTO `{$_pre}pic` ( `id` , `fid` , `mid` , `uid` , `type` , `imgurl` , `name` ) VALUES ( '$id', '$fid', '$mid', '$lfjuid', '0', '$value', '{$titledb[$key]}')");

        }

UPDATE {$_pre}pic SET name='{$titledb[$key]}',imgurl='$value' WHERE pid='{$piddb[$key]}'

注意看这语句。 $title 并没有初始化 那么结合qibocms的全局机制 那么就可以控制

而且这里 $titledb[$key] 如果我们提交的$titledb 为字符串的话 那么[$key]就成了读取字符的了。 如果$key 为0 那么就是读取字符串的第一位

如果我们提交' 被qibocms的全局转义成了\' 那么截取第一位 就是\

就能吃掉一个单引号了。 然后 刚好后面的一个变量可控。

导致了可以注入。 $value 虽然结尾限定了必须为jpg

但是直接注释掉后面的就行了。

可以看到截取的\ 吃掉了 单引号 造成了注入。

构造一下。

成功出数据。

测试demo:

成功报错 直接update column就出数据了。

漏洞证明

修复方案

判断是不是数组。

如果是数组的话 再进行这样的操作。