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

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

缺陷编号:wooyun-2015-0122523

漏洞标题:正方教务管理系统最新版无条件注入&GetShell

相关厂商:zfsoft.com

漏洞作者: RedFree

提交时间:2015-06-24 17:53

修复时间:2015-09-26 07:50

公开时间:2015-09-26 07:50

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-24: 细节已通知厂商并且等待厂商处理中
2015-06-28: 厂商已经确认,细节仅向厂商公开
2015-07-01: 细节向第三方安全合作伙伴开放
2015-08-22: 细节向核心白帽子及相关领域专家公开
2015-09-01: 细节向普通白帽子公开
2015-09-11: 细节向实习白帽子公开
2015-09-26: 细节向公众公开

简要描述:

最新几个版本正方教务系统的SQL注入漏洞,无需任何条件!真正的教务杀手,获取教师、部门用户密码,查看妹子信息不是梦!

详细说明:

正方教务系统提供了一系列的WebService接口,然而这些接口并未经过严格的认证,从而导致任何浏览者都可以使用这些接口查询信息。由于其对用户提交的参数未进行过滤,从而导致注入的发生!
搜索发现正方教务系统的asmx文件大致有这么些:

1.jpg


【1】文件管理接口
首先查看file.asmx:

2.jpg


checkFile(检查文件是否存在)只要求提供一个文件路径便可以工作。

3.jpg


尝试使用soap协议去请求:

4.jpg


5.jpg


UpFile2Dir(上传文件到指定目录),本以为这个接口有些利用价值,然而看完代码后却发现根本无法利用。代码如下:

6.jpg


其中的 checkFilePath函数是来检查filepath是否法的,当然这个filepath并不是指文件路径,它是写在配置文件中的一系列字串。然而通过对众多正方教务系统的测试发现,基本上都没有配置这个字串。所以无论你的filePath是什么,当调用UpFile2Dir时均会报“未设置可信地址”这个错误。从日志的记录中也印证了这一点:

8.jpg


【2】各类查询接口
正方教务系统同样提供了各类查询接口,我仅仅研究了service.asmx和service1.asmx中的数个接口便发现了众多的注入。

9.jpg


需要注意的是这些接口中需要提供strPass,和strKey这两个参数(有的只用提供strKey有的需要提供strPass,有的则两都都要提供)。
经过反编译发现strPass是从数据库中查询出来的(不过悲剧的是绝大多数的正方教务系统并没有wsmmb这个表,估计这是历史遗留下的接口。。。):

10.jpg


而strKey是定义好的常量(

sKey = "KKKGZ2312";

):

11.jpg


到这里已经非常显然了,有了sKey就可以去查询一些接口了。
【3】查询接口注入
比如BMCheckPassword(检查部门账号密码?):

12.jpg


实际上只提供strYHM、sKey这两个参数就可查询了,如图(提供正确的用户名时回显结果为5,用户名错误时回显结果为3):

13.jpg


14.jpg


尝试在这里构造注入语句:

15.jpg


16.jpg


使用这样的payload来查询jwc01的密码:

jwc01' and (SELECT SUBSTR(TO_CHAR(KL),1,1) from yhb where yhm='jwc01')='a


17.jpg


最后得到jwc01的加密密码为:2jl)Dssu,解密得:llj@usst

18.jpg


登录教务系统:

19.jpg


【4】更粗暴的注入
获得上面接口的注入点后,我并满足,因为更新一点版本的正方教务系统已经去掉了BMCheckPassword这个接口,于是继续寻找。功夫不负有心人最终找到了GetStuCheckinInfo这个接口中存在的注入。

20.jpg


21.jpg


提供学号、学年+学期、sKey便可以查询。然而这个接口注入的粗暴之处在于可以使用union查询。

22.jpg


23.jpg


学号处构造这样的payload测试:

222222' union select Null,'test',Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null from yhb where 'a'='a


24.jpg


查询jwc01的密码:

25.jpg


获得加密密码:zaqtHswK 解密得:1qaz2wsx。登录jwc01这个账号:

26.jpg


【5】GetShell绝杀正方教务系统
您可能要问了:为什么你这么跟jwc01过不去呢?原因很简单:1、jwc01是正方教务系统的初始管理账户,基本上每个教务系统都存在这个账户不必要再麻烦的去获取数据库中的账户信息了。2、正如1所述,jwc01是初始管理账户,拥有很高的权限!
1、低版本的正方
会对低版本的正方教务系统,可以在教务公告发布那里直接上传ashx文件来取得webshell。有时候教务公告发布这个页面并没有给出链接(当然页面是一直存在的),可以F12随便修改个链接为:

<a onclick="GetMc('教务公告发布');" target="zhuti" href="jwggfb.aspx?xh=jwc01&xm=&gnmkdm=N120201">教务公告发布</a>

然后点击标签,你会发现教务公告发布页面打开了!
上传的文件后保存到/wbwj/这个目录中去,上传生成aspx文件的ashx到wbwj,访问测试(当然直接上传ashx类型的webshell也是可行的):

27.jpg


28.jpg


29.jpg


2、高版本的正方
高版本的正方教务系统如果提交的文件名中含有asp、cer、aspx、cdx、asa等这些关键字(只要文件名或后缀中含有这些关键字)就会拦截掉请求。

30.jpg


审计反编译的代码得知允许上传的缀列表保存在表fjsckzb中:

31.jpg


允许上传的后缀SYFLG列标记为1,很显然,除了这些后缀其它的均不允许上传。
尝试上传ashx文件:

32.jpg


那么可不可以添加一条后缀到这个表中呢?(我对Oracle了解的不够深入,不知道如何通过注入点多行查询去insert一条记录。。。)然而我使用了另一种方法:通过注入点(正方默认连接的账号是DBA)获取数据库的账号密码之后内网连接数据库或是使用Oracle提供的isqlplus登录:http://jwgl.xx.edu.cn:5560/isqlplus。之后再将ashx后缀添加到可上传列表,管理账号登录上传>取得webshell。(事实上只要获得了DBA权限的账号和密码,就可以使用JAVA来执行命令了*^_^*)

33.jpg


34.jpg


受限于我现在的网络环境,以前使用isqlplus已成功执行命令的内网案例不能截图证明。如审核需要我提供5个以上的通用案例,可再联系我。

漏洞证明:

33.jpg


34.jpg

修复方案:

全面检查webservice接口!

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2015-06-28 07:48

厂商回复:

CNVD确认所述情况,已经由CNVD通过以往建立的处置渠道向软件生产厂商通报。

最新状态:

暂无