安全伴我行

今天朋友告诉我说学习新生安全教育可以获得1个学分,我非常激动,因为这是我可以拿到的第一个学分,但是当我进入平台发现,需要学习80节课。看了几节课,感觉大部分都学过,就不太想看了,在网上找了个漏洞,还没修复,下面记录复现过程。

进入平台 随便打开一节课

image-20210812215155610

学完之后会有弹框

image-20210812215404487

同时在Network里发现了一个请求

image-20210812215444768

image-20210812215459211

看一下发送请求的对象

image-20210812215556557

除了ajax和send 发现了一个wx.js 的finishWxCourse()函数

请求应该是从这里发出来的 在新的界面看一些这个js文件里的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function finishWxCourse() {
try{console.log(exportRoot.currentFrame)}catch(e){}
try {
var userid = getQueryString("userCourseId");
var jiaoxuejihuaid = getQueryString("tenantCode");
var finishWxHost = document.referrer.replace("http://","").replace("https://","").split("/")[0];
if(document.referrer=="" || document.referrer==null || document.referrer==undefined){
finishWxHost = "weiban.mycourse.cn"
}

var webUrl = window.location.href;
var finishWxUrl=getRecordUrl(webUrl);
if(finishWxHost.indexOf("218.25.139.161") > 0){
//finishWxUrl = "http://"+finishWxHost+"/pharos/usercourse/finish.do";
finishWxUrl = "https://"+finishWxHost+"/pharos/usercourse/finish.do";
}

var finishData = {"userCourseId": userid, "tenantCode": jiaoxuejihuaid};

$.ajax({
async: false,
url: finishWxUrl,
type: "GET",
dataType: "jsonp",
data: finishData,
timeout: 5000,

success : function (data) {
if (data.msg == "ok") {
alert("恭喜,您已完成本微课的学习");
} else {
alert("发送完成失败");
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
} catch (e) {
alert("报了啥错误" + e)
}
}

函数开头是获取id

1
2
var userid = getQueryString("userCourseId");
var jiaoxuejihuaid = getQueryString("tenantCode");

然后获取网址

1
2
3
4
5
6
7
8
9
10
var finishWxHost = document.referrer.replace("http://","").replace("https://","").split("/")[0];
if(document.referrer=="" || document.referrer==null || document.referrer==undefined){
finishWxHost = "weiban.mycourse.cn"
}

var webUrl = window.location.href;
var finishWxUrl=getRecordUrl(webUrl);
if(finishWxHost.indexOf("218.25.139.161") > 0){
//finishWxUrl = "http://"+finishWxHost+"/pharos/usercourse/finish.do";
finishWxUrl = "https://"+finishWxHost+"/pharos/usercourse/finish.do";

把获取的id放进finishData

1
var finishData = {"userCourseId": userid, "tenantCode": jiaoxuejihuaid};

然后通过ajax传送把finishData传送到data

最后调用了一个function把data传过去 就能完成学习 然后返回一个弹框

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$.ajax({
async: false,
url: finishWxUrl,
type: "GET",
dataType: "jsonp",
data: finishData,
timeout: 5000,

success : function (data) {
if (data.msg == "ok") {
alert("恭喜,您已完成本微课的学习");
} else {
alert("发送完成失败");
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
}
});
} catch (e) {
alert("报了啥错误" + e)
}
}

我们再点开一节课 进入Console

javascript context切换到mcwk.mycourse.cn这个iframe

image-20210812220525925

然后调用输入finishWxCourse()调用函数

即可出现弹框

image-20210812221516370

返回课程列表 也是显示完成的