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

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

缺陷编号: WooYun-2016-173130

漏洞标题: PHPCMS任意前台用户密码重置漏洞

相关厂商: phpcms

漏洞作者: 路人甲

提交时间: 2016-01-27 18:38

公开时间: 2016-01-28 17:30

漏洞类型: 非授权访问/权限绕过

危害等级: 高

自评Rank: 15

漏洞状态: 厂商已经确认

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

Tags标签: 逻辑错误 认证缺陷

6人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

RT

详细说明:

/modules/member/index.php

code 区域
public function send_newmail() {
$_username = param::get_cookie('_regusername');
$_userid = param::get_cookie('_reguserid');
$_ssouid = param::get_cookie('_reguseruid');
$newemail = $_GET['newemail'];

if($newemail==''){//邮箱为空,直接返回错误
return '2';
}
$this->_init_phpsso();
$status = $this->client->ps_checkemail($newemail);
if($status=='-5'){//邮箱被占用
exit('-1');
}
if ($status==-1) {
$status = $this->client->ps_get_member_info($newemail, 3);
if($status) {
$status = unserialize($status); //接口返回序列化,进行判断
if (!isset($status['uid']) || $status['uid'] != intval($_ssouid)) {
exit('-1');
}
} else {
exit('-1');
}
}
//验证邮箱格式
pc_base::load_sys_func('mail');
$code = sys_auth($_userid.'|'.microtime(true), 'ENCODE', get_auth_key('email'));
$url = APP_PATH."index.php?m=member&c=index&a=register&code=$code&verify=1";

//读取配置获取验证信息
$member_setting = getcache('member_setting');
$message = $member_setting['registerverifymessage'];
$message = str_replace(array('{click}','{url}','{username}','{email}','{password}'), array('<a href="'.$url.'">'.L('please_click').'</a>',$url,$_username,$newemail,$password), $message);

if(sendmail($newemail, L('reg_verify_email'), $message)){
//更新新的邮箱,用来验证
$this->db->update(array('email'=>$newemail), array('userid'=>$_userid));
$this->client->ps_member_edit($_username, $newemail, '', '', $_ssouid);
$return = '1';
}else{
$return = '2';
}
echo $return;
}



注意这句话:

$this->db->update(array('email'=>$newemail), array('userid'=>$_userid));

$newemail是来自$_GET['newemail'],$_userid来自param::get_cookie('_reguserid');

看看get_cookie函数:

code 区域
public static function get_cookie($var, $default = '') {
$var = pc_base::load_config('system','cookie_pre').$var;
$value = isset($_COOKIE[$var]) ? sys_auth($_COOKIE[$var], 'DECODE') : $default;
if(in_array($var,array('_userid','userid','siteid','_groupid','_roleid'))) {
$value = intval($value);
} elseif(in_array($var,array('_username','username','_nickname','admin_username','sys_lang'))) { // site_model auth
$value = safe_replace($value);
}
return $value;
}



从加密cookie中获取,那么怎么伪造这个cookie?

这里有一个$value = intval($value);。intval可以让 1xxxxx这样的字符串变成数字1。所以只需要注册一个用户名为1xxxxxx的用户,在cookie里找到用户名的加密值,填入_reguserid的值即可。

所以这二者都是可控的,我们可以通过这里来重置任意用户的邮箱,然后通过新的邮箱找回密码,修改目标用户密码。

漏洞证明:

首先注册一个用户名为1xxxxxx的用户

14538837500801.jpg



然后拿到其cookie:

14538842300387.jpg



将username的cookie值,填入_reguserid的cookie的值,造成一次伪造:

14538844373123.jpg



传入newemail,这个email是黑客的email,这样就可以将目标用户的邮箱改成该email

14538844870745.jpg



然后我们再用这个邮箱找回密码:

14538846382878.jpg



即可找回userid=1的用户的密码:

14538846972869.jpg



点击重置:

14538847189060.jpg

修复方案:

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2016-01-29 16:40

厂商回复:

感谢

最新状态:

暂无


漏洞评价:

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

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2016-01-27 18:47 | 幻老头儿 ( 普通白帽子 | Rank:259 漏洞数:58 | 新手上路。)
    0

    准备好瓜子,沙发做一个

  2. 2016-01-27 19:02 | Can ( 普通白帽子 | Rank:115 漏洞数:33 | 我是水一样的男子,因为党说我是流动人口。)
    0

    此洞必火

  3. 2016-01-27 19:07 | Huc-Unis ( 普通白帽子 | Rank:1228 漏洞数:327 | 专业使用明小子找漏洞)
    0

    最近漏洞都是同步更新啊 http://loudong.360.cn/vul/info/qid/QTVA-2016-370379

  4. 2016-01-27 20:11 | dzip ( 路人 | Rank:8 漏洞数:3 | 专注写文档)
    0

    观光团入驻

  5. 2016-01-27 20:17 | 围观群众 ( 路人 | Rank:4 漏洞数:2 | 新人学习)
    0

    先留个名

  6. 2016-01-27 20:32 | 这只猪 ( 路人 | Rank:24 漏洞数:6 | )(2009年荣获CCAV首届挖洞大使称号)(★★★...)
    0

    留名等公开

  7. 2016-01-27 20:34 | 你大爷在此 百无禁忌 ( 路人 | Rank:18 漏洞数:9 | 迎风尿三丈 顺风八十米)
    0

    已关注

  8. 2016-01-27 20:37 | sangfor.org ( 实习白帽子 | Rank:52 漏洞数:25 | 天下熙熙,皆为利来; 天下攘攘,皆为利往...)
    0

    关注一下

  9. 2016-01-27 21:14 | 中国Cold ( 路人 | Rank:16 漏洞数:7 | 服重任,行远道,正直而固者,轴也。)
    0

    再现双投

  10. 2016-01-27 21:51 | Jaych0u ( 路人 | Rank:16 漏洞数:6 )
    0

    围观网友

  11. 2016-01-27 22:18 | 昌维 ( 路人 | Rank:15 漏洞数:4 | QQ:867597730,百度贴吧ID:昌维001 个人...)
    0

    @Huc-Unis 双投有用吗?

  12. 2016-01-27 23:10 | 毛毛虫 ( 普通白帽子 | Rank:149 漏洞数:48 | 执著->寂寞->孤单->绽放)
    0

    就是同步补天啊

  13. 2016-01-28 09:32 | 一天到晚吃 ( 实习白帽子 | Rank:69 漏洞数:27 | 好好看,好好学test1xx)
    0

    关注,前天才看的找回密码功能~

  14. 2016-02-04 11:02 | secgov ( 路人 | Rank:10 漏洞数:3 | 安全审计,漏洞挖掘,WAF. 提醒大家揭露漏洞...)
    0

    之前后台也这样

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