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

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

缺陷编号:wooyun-2015-0100672

漏洞标题:NIUBICMS地方门户系统重置任意用户密码

相关厂商:NIUBICMS

漏洞作者: darker

提交时间:2015-03-11 14:36

修复时间:2015-04-30 18:48

公开时间:2015-04-30 18:48

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

危害等级:中

自评Rank:10

漏洞状态:未联系到厂商或者厂商积极忽略

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-03-11: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-04-30: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

http://www.niubicms.com/
官方网站。
http://demo.niubicms.com/
官方demo

详细说明:

部分案例。
juwtc.com
www.jlkxxx.com
www.rtxnet.com
www.lbcsw.com
www.cp368.com
www.sihongren.com
www.wa118114.com
www.mylovedz.com
0759n.com
haoheihe.com
yuecity.net
www.zmdbxw.com
www.rtxnet.com
bdsh.52aite.cn
www.qzw0595.com
xzslhj.com
www.hykm888.cn
www.baixinxi.com
www.anji365.cn
www.jieemall.com
www.ooovv.com
漏洞文件:member/login.inc.php

case 'getpwd':
if($do_submit)
{
if(!preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i',$email))
{
showjsmsg($sitelang['err-email']);
}
$userid=$memberobj->getuseridbyemail($email);
if($userid)
{
$password=mt_rand(100000,999999);
$memberobj->set($userid,array('password'=>$password));
if(UC_OPEN)
{
$info=$memberobj->getbase($userid);
$action='editpwd';
$username=$info['username'];
$old_password='';
$new_password=$password;
$email=$info['email'];
require_once SYSTEM_ROOT.'api/passport_server_ucenter.php';
}
$site_name=$LA['sitename'];
$site_url=$LA['siteurl'];
$desc='您的登录密码已经重置为:'.$password.',请尽快登录修改您的密码:<br />';
$emailbody=stripslashes(file_get_contents(SYSTEM_ROOT.'template/email/email.html'));
$emailbody=str_replace('{$site_name}',$site_name,$emailbody);
$emailbody=str_replace('{$site_url}',$site_url,$emailbody);
$emailbody=str_replace('{$username}',$site_name.'用户',$emailbody);
$emailbody=str_replace('{$email}',$email,$emailbody);
$emailbody=str_replace('{$desc}',$desc,$emailbody);
$emailbody=str_replace('{$url}',$LA['siteurl'].'member/index.php?file=login&action=login',$emailbody);
require_once SYSTEM_ROOT.'include/email.class.php';
$emailobj=new email();
$emailobj->set($LA['mail_server'], $LA['mail_port'], $LA['mail_user'], $LA['mail_pwd'], $LA['mail_type']);
$emailobj->send($email, $LA['sitename'].'- 找回密码', $emailbody, $LA['mail_user']);
showjsmsg('新密码已经发送到您的邮箱,请查收后登录!');
}
else
{
showjsmsg('该邮箱尚未注册或不存在!');
}
}


随机生成密码为6位数字。
$password=mt_rand(100000,999999);
...
...
$desc='您的登录密码已经重置为:'.$password.',请尽快登录修改您的密码:
我们注册一个会员。
然后找回密码。
新生成的密码为6位纯数字。
http://demo.niubicms.com/member/index.php?file=login&action=login
由于登陆多次,验证码不会失效。

case 'login':
if($_userid)
{
header("location:".LA_PATH.'member/index.php');exit();
}
$captcha_open=explode(",",$LA['captcha_open']);
$captquetion_open=explode(",",$LA['captquetion_open']);
if(isset($do_submit))
{
if(in_array(2,$captcha_open) && $_POST['inputcheckcode']!=$_SESSION['captcha'])
{
showjsmsg('ÑéÖ¤ÂëÊäÈë²»ÕýÈ·£¡');
}
if(!preg_match('/^[\x80-\xff_a-zA-Z0-9]{1,64}$/i',$account) && !preg_match('/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/i',$account))
{
showjsmsg('µÇ½Õ˺Ų»´æÔÚ£¡');
}
if(preg_match('/[\x80-\xff]/i',$password))
{
showjsmsg('µÇ½ÃÜÂë²»ÕýÈ·£¡');
}

$info['username']=strpos($account,'@')?'':$account;
$info['email']=strpos($account,'@')?$account:'';
$uccode='';
if(UC_OPEN)
{
require_once SYSTEM_ROOT.'api/passport_server_ucenter.php';
$db=new mysql();
$db->connect(LA_HOST,LA_USER,LA_PSW,LA_NAME,LA_PCONNECT,LA_CHARSET);
}
$userid=$memberobj->getuserid($account);
if(!$userid)
{
$userid=$memberobj->getuseridbyemail($account);
}
if(!$userid)
{
showjsmsg('µÇ½Õ˺Ų»´æÔÚ£¡');
}
$info=$memberobj->get($userid);
if($info['password']!=md5($password) || !$info)
{
showjsmsg('µÇ½ÃÜÂë²»ÕýÈ·£¡');
}

$u=array();
$u['logintime']=TIME;
$u['loginip']=IP;
if($info['expire']<TIME)
{
$u['gradeid']=3;
}

$memberobj->set($userid,$u);
$la_auth_key=md5(AUTH_KEY.$_SERVER['HTTP_USER_AGENT']);
$la_auth=la_auth($userid."\t".md5($password),'ENCODE',$la_auth_key);
set_cookie('auth',$la_auth,0);

if($refer)
{
exit($uccode.'<script language="javascript">top.location.href="'.$refer.'";</script>');
}
else
{
exit($uccode.'<script language="javascript">top.location.href="'.LA_PATH.'member/index.php?file=user&action=complete";</script>');
}
}
else
{
include member_tlp('login');
break;
}


可以暴力破解6位数字。达到重置任意用户密码目的。

漏洞证明:

官方demo 注册用户有点问题。
这里使用www.lbcsw.com 这个做演示。= =好像这个发送邮件有点问题。
但是不影响漏洞演示,找回密码会重置成10000~999999的纯数字。
我们慢慢猜就可以了。

niubicms.png


测试的时候线程开大了。
= =服务器不堪重任。挂了。

修复方案:

1.生成复杂的随机密码。
2.登陆页面验证码出错后,重新生成验证码。

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


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝