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

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

缺陷编号: WooYun-2015-146243

漏洞标题: phpyun 任意用户密码修改两处 (秒破/demo测试)

相关厂商: php云人才系统

漏洞作者: ′雨。认证白帽子

提交时间: 2015-10-13 11:09

公开时间: 2016-01-11 15:32

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

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: 无

9人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

好久没看过php了。。。。

如题咯。

详细说明:

来看到找回密码的地方。



app/controller/forgetpwd/index.class.php



code 区域
function send_action(){
$username=yun_iconv("utf-8","gbk",$_POST['username']);
if(!$this->CheckRegUser($username)&&!$this->CheckRegEmail($username)){
$res['msg']=yun_iconv("gbk","utf-8","用户名不符合规范!");
$res['type']='8';
echo json_encode($res);die;
}
$M=$this->MODEL("userinfo");
$where=array("`username`='".$username."' or `email`='".$username."' or `moblie`='".$username."'");
$info=$M->GetMemberOne($where,array("field"=>"`uid`,`username`,`email`,`moblie`"));

if($info['uid']){
$sendcode=rand(100000,999999);//这里从这个范围里随机抽取一个数字来 生成token 来验证 数字还挺大的 然而并没有什么卵用。
setcookie("moblie_code",$sendcode,time()+120, "/");//我擦 这是什么意思。。 为什么要把生成的token给我。。。
if($_POST['sendtype']=='email'){
if(!($this->config['sy_smtpserver']!="" && $this->config['sy_smtpemail']!="" && $this->config['sy_smtpuser']!="")){
$res['msg']=yun_iconv("gbk","utf-8","还没有配置邮箱,请联系管理员!");
$res['type']='8';
echo json_encode($res);die;
}elseif($this->config['sy_email_getpass']=="2"){
$res['msg']=yun_iconv("gbk","utf-8","网站未开启邮件找回密码!");
$res['type']='8';
echo json_encode($res);die;
}
}else{
if(!$this->config["sy_msguser"] || !$this->config["sy_msgpw"] || !$this->config["sy_msgkey"]){
$res['msg']=yun_iconv("gbk","utf-8","还没有配置短信,请联系管理员!");
$res['type']='8';
echo json_encode($res);die;
}elseif($this->config['sy_msg_getpass']=="2"){
$res['msg']=yun_iconv("gbk","utf-8","网站未开启短信找回密码!");
$res['type']='8';
echo json_encode($res);die;
}
}
$fdata=$this->forsend(array('uid'=>$info['uid'],'usertype'=>$info['usertype']));
$data['uid']=$info['uid'];
$data['username']=$info['username'];
$data['name']=$fdata['name'];
$data['type']="getpass";
if($_POST['sendtype']=='email'){
$data['email']=$info['email'];
}else{
$data['moblie']=$info['moblie'];
}
$data['sendcode']=$sendcode;
$data['date']=date("Y-m-d");
$status=$this->send_msg_email($data);
if($_POST['sendtype']=='email'){
$check=$info['email'];
}else{
$check=$info['moblie'];
}
$cert=$M->GetCompanyCert(array("uid"=>$info['uid'],"type"=>"5","check"=>$check),array("field"=>"`uid`,`check2`,`ctime`,`id`"));
if($cert){
$M->UpdateCompanyCert(array("check2"=>$sendcode,"ctime"=>time()),array("id"=>$cert['id']));
}else{
$M->AddCompanyCert(array('type'=>'5','status'=>0,'uid'=>$info['uid'],'check2'=>$sendcode,'check'=>$check,'ctime'=>time()));
}
if($_POST['sendtype']=='email'){
$res['msg']=iconv("gbk","utf-8",'验证码邮件发送成功!');
}else{
$res['msg']=iconv("gbk","utf-8",'验证码短信'.$status);
if($status!="发送成功!"){
$res['type']='8';
echo json_encode($res);die;
}
}
$res['type']='1';
$res['uid']=$info['uid'];
$res['username']=$this->half_replace(yun_iconv("gbk","utf-8",$info['username']),'GBK');
$res['email']=$this->half_replace($info['email']);
$res['moblie']=$this->half_replace($info['moblie']);
echo json_encode($res);die;
}else{
$res['type']='2';
echo json_encode($res);die;
}
}





分析见注释。



直接demo测试一下。



**.**.**.**



我自己注册了一个号 xiaoyu



http://**.**.**.**/index.php?m=forgetpw



然后输入xiaoyu





code 区域
您正在找回密码的账号为:xi***yu,请选择重置密码方式:

选择密保邮箱 9158*******com

选择绑定手机号 141*****241

若您无法使用上述方法找回,请联系客服400-880-5523





这里选择邮箱 然后下一步。



1.png





然后我们刷新 抓包。



code 区域
GET /index.php?m=forgetpw HTTP/1.1
Host: **.**.**.**
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20100101 Firefox/12.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Proxy-Connection: keep-alive
Referer: http://**.**.**.**/index.php?m=login
Cookie: CNZZDATA3860868=cnzz_eid%3D728936302-1434163605-%26ntime%3D1434169820; safedog-flow-item=E8B28CBFB51FE7D89532C87629CB95F8; PHPSESSID=o3tg919m4gma3vq3mh6is5ce54; moblie_code=567221
Cache-Control: max-age=0





moblie_code=567221



2.png





然后直接输入密码就行了。







第二处





另外一处就是手机页面的找回密码的文件



\app\controller\wap\forgetpw.class.php



code 区域
function send_action(){
$username=yun_iconv("utf-8","gbk",$_POST['username']);
if(!$this->CheckRegUser($username)&&!$this->CheckRegEmail($username)){
$res['msg']=yun_iconv("gbk","utf-8","用户名不符合规范!");
$res['type']='8';
echo json_encode($res);die;
}
$M=$this->MODEL("userinfo");
$where=array("`username`='".$username."' or `email`='".$username."' or `moblie`='".$username."'");
$info=$M->GetMemberOne($where,array("field"=>"`uid`,`username`,`email`,`moblie`"));

if($info['uid']){
$sendcode=rand(100000,999999);
setcookie("moblie_code",$sendcode,time()+120, "/");





跟pc文件的找回密码一样的问题 就不多说拉。。



一样的。



两个文件都修复下把。



漏洞证明:

如上。

修复方案:

去掉setcookie把。。



和 换个牛逼点的验证。。。

版权声明:转载请注明来源 ′雨。@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-10-13 11:20

厂商回复:

感谢提供!

最新状态:

暂无


漏洞评价:

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

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

评价

  1. 2015-10-13 11:15 | 1c3z ( 普通白帽子 | Rank:297 漏洞数:63 | @)!^)
    0

    在床上也这么快么?

  2. 2015-10-13 11:18 | 大师兄 ( 实习白帽子 | Rank:31 漏洞数:8 | 每日必关注乌云)
    0

    雨神回归了?不上课?

  3. 2015-10-13 11:38 | scanf ( 核心白帽子 | Rank:1457 漏洞数:206 | 。)
    0

    可怕

  4. 2015-10-13 12:46 | 泳少 ( 普通白帽子 | Rank:248 漏洞数:82 | ★ 梦想这条路踏上了,跪着也要...)
    0

    d不见了。。

  5. 2015-10-13 13:10 | onpu ( 普通白帽子 | Rank:354 漏洞数:62 | 不轻诺 故我不负人 不信诺 故人不负我)
    0

    雨神归来

  6. 2015-10-13 14:18 | 0xev4l ( 路人 | Rank:0 漏洞数:1 | 努力吧!骚年!北京买房买车买菜!)
    1

    雨神回归了!

  7. 2015-10-13 14:22 | 0xev4l ( 路人 | Rank:0 漏洞数:1 | 努力吧!骚年!北京买房买车买菜!)
    0

    我猜一下,修改COOKIE中的uid,然后提交修改密码操作即可?

  8. 2015-10-13 17:44 | Msyb ( 实习白帽子 | Rank:53 漏洞数:14 | 非常荣幸加入乌云。)
    0

    来晚了

  9. 2015-10-16 23:40 | hellowooyun ( 路人 | Rank:15 漏洞数:1 | hello wooyun)
    0

    @0xev4l 这么简单的话不会2个$了

  10. 2015-11-12 09:04 | 换个昵称 ( 路人 | Rank:9 漏洞数:4 | 1)
    0

    原来如此,这么低级的错误都犯

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