漏洞详情

  简述:禅道是第一款国产的开源项目管理软件,它的核心管理思想基于敏捷方法 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知识赋能第五期第一课——精益开源

    4月26日晚上19点,知识赋能第五期第一节课<精益开源--理解设计思维.精益创业.敏捷开发是如何应用到开源项目中>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由开源 ...

  2. 2022 OpenHarmony年度运营报告

  3. 浅谈OpenHarmony LiteOS-A内核之基础硬件——中断控制器GIC400

    一.前言 OpenAtom OpenHarmony(以下简称"OpenHarmony")采用多内核架构,支持Linux内核的标准系统.LiteOS-A的小型系统.LiteOS-M的 ...

  4. Python将依赖包导出到requirements.txt文件

    代码 # 查询环境中已经安装的库 pip list # 将所有依赖库导出到 requirements.txt 文件 pip freeze > requirements.txt

  5. 为你推荐一款高效的IO组件——okio

    原文:https://mp.weixin.qq.com/s/XnNhSq8ESoslb2DQEzMbCQ,点击链接查看更多技术内容.   前不久,三方组件库上新了一批JS/eTS组件,其中就包括oki ...

  6. Luogu P3007 奶牛议会

    观前须知 本题解使用 CC BY-NC-SA 4.0 许可. 同步发布于 Luogu 题解区. 更好的观看体验 请点这里. 笔者的博客主页 正文 Luogu P3007 [USACO11JAN] Th ...

  7. orleans —————— 为什么有这个框架 [ 一]

    前言 简单说明一下,为什么有orleans 这个框架. 正文 orleans 这个框架的理论基础是 actor, 在1973年提出,当初是为了大量处理高并发计算机的并行模型,其核心思想是将系统中独立的 ...

  8. pytorch两种模型保存方式

    只保存模型参数 # 保存 torch.save(model.state_dict(), '\parameter.pkl') # 加载 model = TheModelClass(...) model. ...

  9. h5py这个坑-PyCharm Process finished with exit code -1073741819 (0xC0000005)

    在用pytorch和tensorflow做语音合成时,碰到了个很无解的bug, PyCharm 报错 Process finished with exit code -1073741819 (0xC0 ...

  10. 《c#高级编程》第2章C#2.0中的更改(一)——泛型

    一.实例 当我们需要编写一些通用的代码,但是不确定它们将处理的数据类型时,泛型就非常有用了.下面是一个简单的 C# 泛型示例: using System; public class Example { ...