漏洞详情

  简述:禅道是第一款国产的开源项目管理软件,它的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序地跟踪管理起来,完整地覆盖了项目管理的核心流程。

漏洞危害

  该漏洞是由于禅道项目管理系统权限认证存在缺陷导致,攻击者可利用该漏洞在未授权的情况下,通过权限绕过在服务器执行sql进而可以写入webshell。

影响范围

  • V17.4<= 禅道 <= V18.0.beta1(开源版)
  • V3.4<= 禅道 <= V4.0.beta1(旗舰版)
  • V7.4<= 禅道 <= V8.0.beta1(企业版)

复现过程

我下载了开源版V17.4的程序来进行代码审计

其中关键部分在于权限绕过,

代码文件:framework\base\control.class.php

 1 if($this->config->installed && !in_array($this->moduleName, $this->config->openModules) && empty($this->app->user) && !$this->loadModel('common')->isOpenMethod($this->moduleName, $this->methodName))
2 {
3 $uri = $this->app->getURI(true);
4 if($this->moduleName == 'message' and $this->methodName == 'ajaxgetmessage')
5 {
6 $uri = helper::createLink('my');
7 }
8 elseif(helper::isAjaxRequest())
9 {
10 die(json_encode(array('result' => false, 'message' => $this->lang->error->loginTimeout)));
11 }
12
13 $referer = helper::safe64Encode($uri);
14 die(js::locate(helper::createLink('user', 'login', "referer=$referer")));
15 }

empty($this->app->user) 处进行了权限判断,但只判断了user不为空的情况,而user的信息主要存在session中,所以只要能构造一个user的键即可。

对允许访问的模块和方法进行审计发现了在misc模块的captcha方法中可以伪造session,且只能控制键不能控制值,正好可以用来绕过权限认证:

代码文件:module\misc\control.php

 1 public function captcha($sessionVar = 'captcha', $uuid = '')
2 {
3 $obLevel = ob_get_level();
4 for($i = 0; $i < $obLevel; $i++) ob_end_clean();
5
6 header('Content-Type: image/jpeg');
7 $captcha = $this->app->loadClass('captcha');
8 $this->session->set($sessionVar, $captcha->getPhrase());
9 $captcha->build()->output();
10 }

权限认证绕过之后,发现可以访问一部分代码,在对后台的功能审计时候发现,在导入数据时候的数据库判断存在sql注入

代码文件:module\convert\model.php

1 public function dbExists($dbName = '')
2 {
3 $sql = "SHOW DATABASES like '{$dbName}'";
4 return $this->dbh->query($sql)->fetch();
5 }

审查该段代码可以发现,存在sql注入

同文件下的该段代码一样存在sql注入,且为堆叠注入

 1 public function connectDB($dbName = '')
2 {
3 $dsn = "mysql:host={$this->config->db->host}; port={$this->config->db->port};dbname={$dbName}";
4 try
5 {
6 $dbh = new PDO($dsn, $this->config->db->user, $this->config->db->password);
7 $dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
8 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
9 $dbh->exec("SET NAMES {$this->config->db->encoding}");
10 $this->sourceDBH = $dbh;
11 return $dbh;
12 }
13 catch (PDOException $exception)
14 {
15 return $exception->getMessage();
16 }
17 }

至此已复现完毕!

回顾权限验证函数

1 catch(EndResponseException $endResponseException)
2 {
3 echo $endResponseException->getContent();
4 }

其中这个就是权限不满足时候执行的,原本这时候应该就要结束了,但是这里采用的是echo 所以导致了可以继续执行代码,所以只要上面的验证绕过,这里就可以继续执行。

在官方发布的新版中这里修改为了die,如下:

die($endResponseException->getContent());

代码不能继续执行了。

禅道的rce poc已经在github上发布了,作者在这就不做过多赘述,sql注入的poc已放上github:https://github.com/spmonkey/zentao_sql_poc

结语

本文只用于参考学习,增强自己的代码审计能力,一切用于违法犯罪的均与作者无关。

网络不是法外之地,请不要轻易挑战法律底线。

复现禅道V17.4的sql注入漏洞的更多相关文章

  1. 复现禅道V16.5的SQL注入(CNVD-2022-42853)

    漏洞详情 禅道V16.5未对输入的account参数内容作过滤校验,导致攻击者拼接恶意SQL语句执行. 环境搭建 环境下载:禅道V16.5 下载后双击运行,进入目录运行start.exe 直接访问即可 ...

  2. 【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现

    影响版本 wordpress < 5.8.3 分析 参考:https://blog.csdn.net/qq_46717339/article/details/122431779 在 5.8.3 ...

  3. Django之SQL注入漏洞复现(CVE-2021-35042)

    前言 SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露 漏洞原理 Django 组件存在 SQL 注入漏洞,该漏洞是 ...

  4. ref:ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3)

    ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3) ref:https://www.jianshu.com/p/18d06277161e TimeSHU 2018.04 ...

  5. Beescms_v4.0 sql注入漏洞分析

    Beescms_v4.0 sql注入漏洞分析 一.漏洞描述 Beescms v4.0由于后台登录验证码设计缺陷以及代码防护缺陷导致存在bypass全局防护的SQL注入. 二.漏洞环境搭建 1.官方下载 ...

  6. 【漏洞分析】Discuz! X系列全版本后台SQL注入漏洞

    0x01漏洞描述 Discuz!X全版本存在SQL注入漏洞.漏洞产生的原因是source\admincp\admincp_setting.php在处理$settingnew['uc']['appid' ...

  7. 企业安全03Django GIS SQL注入漏洞CVE-2020-9402

    Django GIS SQL注入漏洞CVE-2020-9402 一.漏洞描述 Django是Django基金会的一套基于Python语言的开源Web应用框架.该框架包括面向对象的映射器.视图系统.模板 ...

  8. PHPCMS V9.6.0 SQL注入漏洞分析

    0x01 此SQL注入漏洞与metinfo v6.2.0版本以下SQL盲注漏洞个人认为较为相似.且较为有趣,故在此分析并附上exp. 0x02 首先复现漏洞,环境为: PHP:5.4.45 + Apa ...

  9. Mybatis下的SQL注入漏洞原理及防护方法

    目录 一.前言 二.SQL 注入漏洞原理 1.概述 2.漏洞复现 3.修复建议 三.Mybatis 框架简介 1.参数符号的两种方式 2.漏洞复现 四.Mybatis 框架下的 SQL 注入问题及防护 ...

  10. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

随机推荐

  1. Java基础知识:面试官必问的问题

    数据类型 基本类型 byte/8 char/16 short/16 int/32 float/32 long/64 double/64 boolean/~ boolean 只有两个值:true.fal ...

  2. 用户触达难?流失率高?HMS Core预测服务和智能运营,助你提前掌握营销时机,解决此难题。

    用户流失了,触达难? 活动做了那么多,转化仍然很低? 运营也需要提前思考,预测用户动向,提前精准触达,才能事半功倍.结合HMS Core分析服务的预测服务和智能运营,洞察营销时机,实时落地营销策略,提 ...

  3. 【直播回顾】Hello HarmonyOS进阶课程第四课——ArkUI动画开发

    5 月 25 日晚上 19 点,由知名HarmonyOS开发领域的up主九弓子主讲的Hello HarmonyOS进阶系列应用篇第四课<ArkUI动画开发>,在众多HarmonyOS社群内 ...

  4. pySpark-merge多个dataframe

    当需要merge多个spark datafame的时候: from functools import reduce buff = [] for pdfs in [pdf1, pdf1,pdf3...] ...

  5. android 关于插件包内的依赖版本不一致问题得解决

    前言 今天使用一个插件包的时候,依赖包冲突了,在此记录一下. 正文 在引用一个: debugImplementation 'com.squareup.leakcanary:leakcanary-and ...

  6. javascript现代编程系列教程之七——字符数据类型-字符集-编码解码-常用字符串处理方法(七)

    一.字符集 Unicode:Unicode 是一个字符集(Charset),包含了世界上所有的字符.每个字符在 Unicode 中都有其唯一对应的数字编号,这就是我们常说的 Unicode 码. UT ...

  7. 《C# in depth》第5章C#5.0中的更改(十三)——異步枚舉器

    一.異步枚舉 异步枚举器(Async Enumerator)是指一种异步迭代器,可以用于处理异步数据源.它允许我们以异步的方式逐个读取数据源中的元素. 在传统的同步枚举器中,当我们遍历一个集合时,程序 ...

  8. win11右下角快捷面板打不开的处理方法

    win11右下角快捷面板打不开的处理方法 在搜索中查询计算机管理(因为没有将此电脑放出来,所以就用搜索了) 然后找到服务,找到windows推送通知系统服务,右键属性,将自动改为禁用,然后停止此服务, ...

  9. 初接触:从创建工程到导出gerber(学习Altium Designer)

    学习Altium Designer Altium Designer的工程文件后缀为.PrjPcb,主要包含Source Documents和Libraries.Source Documents里面有S ...

  10. 剑指offer11(Java)-旋转数组中的最小值(简单)

    题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转.请返回旋转数 ...