复现禅道V17.4的sql注入漏洞
漏洞详情
简述:禅道是第一款国产的开源项目管理软件,它的核心管理思想基于敏捷方法 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注入漏洞的更多相关文章
- 复现禅道V16.5的SQL注入(CNVD-2022-42853)
		漏洞详情 禅道V16.5未对输入的account参数内容作过滤校验,导致攻击者拼接恶意SQL语句执行. 环境搭建 环境下载:禅道V16.5 下载后双击运行,进入目录运行start.exe 直接访问即可 ... 
- 【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现
		影响版本 wordpress < 5.8.3 分析 参考:https://blog.csdn.net/qq_46717339/article/details/122431779 在 5.8.3 ... 
- Django之SQL注入漏洞复现(CVE-2021-35042)
		前言 SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露 漏洞原理 Django 组件存在 SQL 注入漏洞,该漏洞是 ... 
- 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 ... 
- Beescms_v4.0 sql注入漏洞分析
		Beescms_v4.0 sql注入漏洞分析 一.漏洞描述 Beescms v4.0由于后台登录验证码设计缺陷以及代码防护缺陷导致存在bypass全局防护的SQL注入. 二.漏洞环境搭建 1.官方下载 ... 
- 【漏洞分析】Discuz! X系列全版本后台SQL注入漏洞
		0x01漏洞描述 Discuz!X全版本存在SQL注入漏洞.漏洞产生的原因是source\admincp\admincp_setting.php在处理$settingnew['uc']['appid' ... 
- 企业安全03Django GIS SQL注入漏洞CVE-2020-9402
		Django GIS SQL注入漏洞CVE-2020-9402 一.漏洞描述 Django是Django基金会的一套基于Python语言的开源Web应用框架.该框架包括面向对象的映射器.视图系统.模板 ... 
- PHPCMS V9.6.0 SQL注入漏洞分析
		0x01 此SQL注入漏洞与metinfo v6.2.0版本以下SQL盲注漏洞个人认为较为相似.且较为有趣,故在此分析并附上exp. 0x02 首先复现漏洞,环境为: PHP:5.4.45 + Apa ... 
- Mybatis下的SQL注入漏洞原理及防护方法
		目录 一.前言 二.SQL 注入漏洞原理 1.概述 2.漏洞复现 3.修复建议 三.Mybatis 框架简介 1.参数符号的两种方式 2.漏洞复现 四.Mybatis 框架下的 SQL 注入问题及防护 ... 
- 从c#角度看万能密码SQL注入漏洞
		以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ... 
随机推荐
- 开启新时代,承接新使命,开放原子开源大赛OpenHarmony创新赛正式启航!
			开放原子开源大赛OpenHarmony创新赛,正式启动啦! "OpenHarmony创新赛"是开放原子全球开源大赛下开设的创新赛道,面向企业.个人.高校师生等广大开发者,聚焦O ... 
- C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南
			C 语言中的用户输入 您已经学习了 printf() 函数用于在 C 语言中输出值. 要获取用户输入,可以使用 scanf() 函数: // 声明一个整数变量,用于存储我们从用户那里获得的数字 int ... 
- Git 13 暂存代码
			如果当前分支的功能还没开发完,无法提交代码. 但出现了紧急情况(比如线上BUG),需要立即切换到其他分支进行开发. 此时可以先暂存当前分支代码,等切换回当前分支的时候再恢复. 1.暂存当前分支变更: ... 
- spring boot 学习前提
			前言 总结spring boot的学习前提. 正文 1.spring 程度(可以基本使用,我在学习spring boot的时候,感觉到需要一些spring的基础) 2.maven (这个是包管理,一定 ... 
- 重新整理.net core 计1400篇[一] (.net core 命令行)
			前言 把.net core 从新整理一遍. 下面介绍命令行. 正文 运行一下:dotnet new --list 那么这个时候会返回非常多的模板给你们. 这时候会给我们列出:project Templ ... 
- CentOS7下安装Elasticsearch-7.3.2和Elasticsearch-head
			下载Elasticsearch-7.3.2-linux-x86_64.tar.gzElasticsearch下载地址:https://www.elastic.co/cn/downloads/elast ... 
- kubelet 原理分析
			Reference https://atbug.com/kubelet-source-code-analysis/ kubelet 简介 kubernetes 分为控制面和数据面,kubelet 就是 ... 
- EMR重磅发布智能运维诊断系统(EMR Doctor)——开源大数据平台运维利器
			简介: E-MapReduce 推出面向开源大数据集群的智能运维诊断系统 E-MapReduce Doctor,有效提升大数据集群运维效率,辅助 EMR 用户完善集群监控体系. 大数据运维的挑战-如何 ... 
- 云原生DevOps的5步升级路径
			简介: 究竟什么是云原生DevOps呢?我们认为:云原生DevOps是充分利用云原生基础设施,基于微服务/无服务架构体系和开源标准,语言和框架无关,具备持续交付和智能自运维能力,从而做到比传统DevO ... 
- Service Mesh 从“趋势”走向“无聊”
			简介: 过去一年,阿里巴巴在 Service Mesh 的探索道路上依旧扎实前行,这种坚定并非只因坚信 Service Mesh 未来一定是云计算基础技术的关键组成部分,还因需要借这一技术趋势去偿还过 ... 
