ZenTaoPMS(ZenTao Project Management System),中文名为禅道项目管理软件。
禅道项目管理软件基于自主研发的PHP开发框架——禅道PHP框架开发而成。
禅道有四个版本,分别是开源版,专业版,企业版和集团版。
本文审计对象为禅道开源版,版本为v12.4.3。
项目根目录如下图:项目根目录
其中framework目录包括具体路由分发的实现,这里细节不再展开,可参考《禅道pms-路由及漏洞分析》这篇,链接在文后。
framework目录
至于module目录,则是禅道应用程序具体功能的实现,包含60多个模块。
module目录
以其中一个模块为例,主要看control.php,model.php这两个文件。
模块示例
control.php中的函数可被用户请求直接访问到,下图为admin/control.php中的register函数,则访问请求为index.php?m=admin&f=register&from=1
,请求中的from的值赋值给$from
。
即m为对应module,f为对应方法,方法的参数也与请求中的参数一一对应。
框架路由相关设置
漏洞入口位于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函数
漏洞代码位于922行,文件读取$content
并输出,进入这个逻辑需要$file
变量为字符串值file.
漏洞代码
所以漏洞触发为index.php?m=file&f=sendDownHeader&fileName=2&fileType=1&content=/etc/passwd&type=file
读取/etc/passwd
若存在open_basedir限制,可读取数据库配置文件:index.php?m=file&f=sendDownHeader&fileName=2&fileType=1&content=./../../config/my.php&type=file
。
读取配置文件
漏洞代码
触发链接:index.php?m=im&f=downloadXxdPackage&xxdFileName=../../../../../../../../../etc/passwd
读取/etc/passwd
禅道使用的框架是自研的一套禅道PHP框架,具有一定的复杂性,不在xcheck默认支持框架范围内。
对于框架的适配,xcheck这边均采用人工经验赋能检查器的思路进行相关规则的添加。从人工审计出发,将污点分析理论的关键点传递给检查器,使检查器能够理解新框架中的代码。
以本文的禅道为例,经过前面对路由请求的分析,可得以下人工审计经验:
module目录下子模块中control.php函数可被用户直接访问,函数参数为用户请求参数,即污点
file模块中$this->file
即同模块当中的model.php中的fileModel对象,client模块中$this->client
为同模块中model.php 中的clientModel对象,其他模块也类似
模块control.php中继承的父类control存在loadModel方法,loadModel方法为动态调用对象,如 $this->loadModel("file")
则调用的为file模块中model.php的fileModel对象
loadModel函数
通过将以上经验赋能给检查器,做一个禅道框架的简单适配,就可轻松检查发现项目中的安全漏洞。若由人工审计来做,对60多个子模块逐个审计,工作量可想而知。
downloadXxdPackage 任意文件下载
CNVD-2020-65242 后台任意文件下载
对禅道的代码检查发现问题数较多,对于其中部分与业务密切相关导致利用失败的或者存在一定利用条件的,本文不再赘述。
由于是简单适配,相关分析和提及安全问题仅供参考,有兴趣的小伙伴可发送消息后台一起讨论交流。
《禅道pms-路由及漏洞分析》https://www.anquanke.com/post/id/160473
《【组件攻击链】禅道项目管理系统(ZenTaoPMS)高危漏洞分析与利用》https://mp.weixin.qq.com/s/LIugWEiETPwYmmLwZLe7Ag
想了解Xcheck更多信息或者代码安全审计相关技术欢迎关注xcheck公众号~