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就出数据了。
漏洞证明
修复方案
判断是不是数组。
如果是数组的话 再进行这样的操作。