Zentaopms前台权限绕过+后台远程命令执行漏洞分析

禅道前台权限绕过+后台远程命令执行漏洞分析

漏洞简介

漏洞描述:前台权限绕过,可以调用后台的功能,可配合后台的远程命令执行漏洞

影响版本:

禅道系统 影响版本
开源版 17.4以下的未知版本<=version<=18.0.beta1
旗舰版 3.4以下的未知版本<=version<=4.0.beta1
企业版 7.4以下的未知版本<=version<=8.0.beta1 8.0.beta2

漏洞分析

环境搭建

源码下载地址:https://www.zentao.net/dynamic/zentaopms18.0.beta1-81862.html

权限绕过

这里出现权限绕过的原因,就是当他判断你权限出问题后,处理方式不是直接return,而是丢出一个异常,这就导致代码仍然往下执行,触发loadModule

这里判断没有权限,然后进入deny

image-20230113182719269

进入deny后,由于没有权限,所以利用的这个end,直接抛出异常,但是程序仍然进行

image-20230113182800659

这里进入catch,发现只是echo出来,程序没退出

image-20230113182811777

直接loadModule了

image-20230113182823342

但是这里还有一个先决条件,他判断权限之前,还有一层判断,这里必须得有一个$this->app->user

1
2
3
4
5
6
7
8
9
if(isset($this->app->user))
{
    $this->app->user = $this->session->user;
    if(!commonModel::hasPriv($module, $method))
    {
        if($module == 'story' and !empty($this->app->params['storyType']) and strpos(",story,requirement,", ",{$this->app->params['storyType']},") !== false) $module = $this->app->params['storyType'];
        $this->deny($module, $method);
    }
}

所以你的zentaosid还不能随便写,得写一个注册了的,而zentaosid可以在这里注册

image-20230113182947005

注册了zentaosid后,就可以在前面绕过权限了,所以我们就可以研究后台有什么漏洞可以组合利用

命令执行

命令执行的调用栈

image-20230113182956505

首先loadModule到edit里

image-20230113183003180

进入update,在update里进入checkConnection

image-20230113183012327

到这里解析POST数据,然后当scm为Subversion的时候,client参数进行命令注入

image-20230113183019647

漏洞修复

权限绕过修复

可以看到权限绕过的修复的也很简单,只需要把他die掉,不会继续往下loadModule就可以了,

image-20230113183031220

命令执行修复

然后对于命令执行的修复,在update这里进行了一个checkClient,检测post表单中的client是否非法

image-20230113183042183

参考链接:

link1

Licensed under CC BY-NC-SA 4.0