当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-096990

漏洞标题:qibocms全部开源系统前台注入一枚

相关厂商:齐博CMS

漏洞作者: ′雨。

提交时间:2015-02-13 13:48

修复时间:2015-05-14 15:06

公开时间:2015-05-14 15:06

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-02-13: 细节已通知厂商并且等待厂商处理中
2015-02-13: 厂商已经确认,细节仅向厂商公开
2015-02-16: 细节向第三方安全合作伙伴开放
2015-04-09: 细节向核心白帽子及相关领域专家公开
2015-04-19: 细节向普通白帽子公开
2015-04-29: 细节向实习白帽子公开
2015-05-14: 细节向公众公开

简要描述:

无视GPC。
因为出现的问题还是在公共文件上出的问题。
而且是每个qibo的每个系统都必须有的文件
所以每个系统都存在。
之前在360发的, 然后刚放假 就再去官网下载个新的来看。
惨不忍睹。
用v7整站系统来演示一下
最近通用漏洞貌似要好好查啊,写详细点。

详细说明:

最新下载地址 http://down.qibosoft.com/down.php?v=v7
之前在360发了个 后面看到补了,
之前的漏洞文件 vote/vote.php来看看

foreach($voteId AS $key=>$value)
{
$value=addslashes($value); //对比之前的是 加了一个来转义。
$db->query("UPDATE {$pre}vote_element SET votenum=votenum+1 WHERE id='$value' ");
}


这样是修复了这里没错 但是没修到实处。
导致了我们还可以找到其他的文件的注入。
继续来看看inc/common.inc.php中 这个公共文件 是每个qibo的系统都必须有的。

$_POST=Add_S($_POST);
$_GET=Add_S($_GET);
$_COOKIE=Add_S($_COOKIE);
function Add_S($array){
foreach($array as $key=>$value){
@eregi("['\\\"]+",$key) && die('ERROR KEY!');
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;
}
if(!ini_get('register_globals')){
@extract($_FILES,EXTR_SKIP);//这里是漏洞点。
//可以看到上面的判断条件是 判断register globals 是不是开启的。
// 如果是关闭的 才会进入。 注意是关闭 不是开启哦。。
// regitser globals这个不用多说 从php 4.2开始默认都是off的
// 基本都是关闭的 曾经提交漏洞 因为需要register globals on 所以被未通过。
// 当是off的时候 extract来把_FILES里的读取出来 用了EXTR_SKIP参数
// 所以不能覆盖之前存在的变量 但是qibo是伪全局 所以我们可以找一个未初始化的
// _FILES extract出来后 还是一个数组 所以找一个把数组循环出来的
// 因为_FILES数组里的key是我们不可控制的把, 但是一些value可以控制 例如name
}


所以就要去找一个 把数组循环出来的value带入查询的。
因为之前发了个 把vote/vote.php里面的那处修复了 所以就需要另外找一处了。
找了一会 才找到了一处。。
在member/comment.php中

if($job=='del'){
foreach( $cidDB AS $key=>$value){
$rs=$db->get_one("SELECT aid FROM {$pre}comment WHERE cid='$value'");//把value带入了查询。
$erp=get_id_table($rs[aid]);
$rsdb=$db->get_one("SELECT C.cid,C.uid AS commentuid,C.aid,A.uid,A.fid FROM {$pre}comment C LEFT JOIN {$pre}article$erp A ON C.aid=A.aid WHERE C.cid='$value'");
if($rsdb[uid]==$lfjuid||$rsdb[commentuid]==$lfjuid||$web_admin||in_array($rsdb[fid],$fiddb)){
$db->query("DELETE FROM {$pre}comment WHERE cid='$rsdb[cid]'");
}
$db->query("UPDATE {$pre}article$erp SET comments=comments-1 WHERE aid='$rsdb[aid]'");
}

漏洞证明:

555.jpg


利用放到下面的购买板块啦。
利用很简单 如果能看懂的话 就自己去构造构造把 就别来购买了。
这个member/comment.php 是需要登录一个会员的
其实地方门户系统还有其他的地方是不需要登录会员的。
但是这里我就不多说了。

修复方案:

_FILES过滤。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-02-13 15:05

厂商回复:

感谢提出来

最新状态:

暂无