漏洞详情

  简述:禅道是第一款国产的开源项目管理软件,它的核心管理思想基于敏捷方法 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. OpenHarmony Meetup 深圳站招募令

      OpenHarmony Meetup城市巡回深圳站火热来袭!! 日期:2023年10月15日14:00 地点:深圳市福田区上步路中路1003号 深圳市科学馆 与OpenHarmony技术大咖近距离 ...

  2. SpringBoot常用注解整理

    @SpringBootApplication 定义在main方法入口类处,用于启动sping boot应用项目 @Target(ElementType.TYPE) @Retention(Retenti ...

  3. nginx 如何代理websocket

    前言 下面是配置nginx websocket 的代码. # HTTPS server map $http_upgrade $connection_upgrade { default upgrade; ...

  4. 论文记载:A Survey on Traffic Signal Control Methods

    ABSTRACT 交通信号控制是一个重要且具有挑战性的现实问题,其目标是通过协调车辆在道路交叉口的移动来最小化车辆的行驶时间.目前使用的交通信号控制系统仍然严重依赖过于简单的信息和基于规则的方法,尽管 ...

  5. Vue 路由组件传参的 8 种方式

    我们在开发单页面应用时,有时需要进入某个路由后基于参数从服务器获取数据,那么我们首先要获取路由传递过来的参数,从而完成服务器请求,所以,我们需要了解路由传参的几种方式,以下方式同 vue-router ...

  6. 【数学】主成分分析(PCA)的详细深度推导过程

    Based on Deep Learning (2017, MIT) book. 本文基于Deep Learning (2017, MIT),推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分 ...

  7. 力扣532(java&python)-数组中的 k-diff 数对(中等)

    题目: 给你一个整数数组 nums 和一个整数 k,请你在数组中找出 不同的 k-diff 数对,并返回不同的 k-diff 数对 的数目. k-diff 数对定义为一个整数对 (nums[i], n ...

  8. 消息队列 RabbitMQ 遇上可观测--业务链路可视化

    简介: 本篇文章主要介绍阿里云消息队列 RabbitMQ 版的可观测功能.RabbitMQ 的可观测能力相对开源有了全面的加强,为业务链路保驾护航. 作者:文婷.不周 本篇文章主要介绍阿里云消息队列 ...

  9. 阿里开源支持10万亿模型的自研分布式训练框架EPL(EasyParallelLibrary)

    ​简介:EPL背后的技术框架是如何设计的?开发者可以怎么使用EPL?EPL未来有哪些规划?今天一起来深入了解. ​ 作者 | 王林.飒洋 来源 | 阿里技术公众号 一 导读 最近阿里云机器学习PAI平 ...

  10. Java单元测试技巧之PowerMock

    简介: 高德的技术大佬向老师在谈论方法论时说到:"复杂的问题要简单化,简单的问题要深入化." 这句话让我感触颇深,这何尝不是一套编写代码的方法--把一个复杂逻辑拆分为许多简单逻辑, ...