开源微博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,即可修改其密码
漏洞证明:
修复方案:
过滤,增强验证
相关文章推荐
- 聚美优品任意修改用户密码(非爆破)
- 微信任意用户密码修改漏洞分析
- Oracle 修改任意用户密码
- 微信任意用户密码修改漏洞分析
- 微信任意用户密码修改漏洞分析
- [典型漏洞分享]YS忘记密码机制设计存在缺陷,导致任意用户口令均可被修改【高】
- 【漏洞分析】dedecms有前提前台任意用户密码修改
- 微信任意用户密码修改漏洞分析
- PJBlog3 V3.2.8.352文件Action.asp修改任意用户密码0day
- 微信任意用户密码修改漏洞分析
- net2.0如何修改用户密码的解决
- Linux 入门常用命令 — 修改密码,改变用户
- net2.0如何修改用户密码的解决
- 用户控件(显示用户信息,修改用户名密码)的WebPart预览版
- 修改一个MYSQL用户的密码
- 如何让用户也能修改密码?
- 实现域内用户能够通过网页web方式修改与用户密码
- 在线修改Serv-U 4.2用户密码
- 如何修改mysql用户密码