雨课堂考试异常检测绕过分析

雨课堂考试异常检测绕过分析

刚好前几天有一场考试,之前就听说过雨课堂好像搞了作弊检测什么的。但之前没有测试账号,但是考试的时候又不敢直接去开控制台调试。所以我就用Charles做了一份流量镜像,考完试之后再复盘分析的。分析的过程中还顺手挖到了雨课堂的存储XSS,哈哈。

先说结论:雨课堂的这个JS真的很辣鸡,绕过思路也很简单。

下面是我格式化之后的完整js,感兴趣的小伙伴可以自行研究一下。

http://106.15.73.80/download/yuketang.js

用的是Vue,直接分析关键部分的JS代码。

异常检测仅有定义的onchange这么一个方法就没了,而且是基于document.hidden来判断的,来看它的定义。

document.hidden属性:

bool型,表示页面是否处于隐藏状态。页面隐藏包括页面在后台标签页或者浏览器最小化。

那么哪些情况下会触发呢?

  • 浏览器最小化。
  • 浏览器没有最小化,但是当前页面切换到了其他标签页。
  • 浏览器将要卸载(unload)页面。
  • 操作系统触发锁屏屏幕。

上面的代码中有两层判断,虽然无法从代码中看出e.onlineProctor做了哪些操作,但是只要触发了document.hidden的值为true就会截图上传。所以为了不给监考老师留下任何证据,我们可以拦截掉异常上报的请求。

跟进e.uploadUnnormal(12)分析代码。

uploadUnnormal: function(t) {
	var e = this;
	this.$axios.post(API.feed_add, {
		exam_id: this.exam_id,
		action: t
	}).then(function(t) {}).catch(function(t) {
		e.$message.error("发生错误")
	})
}

其中axios就是一个http库,就是用来发送请求的。参数t的值为12,而API.feed_add的定义并在当前js,不过分析后发现是/online_proctor/stu/monitor/feed/add这个路径。也就是切换标签页会post一个action为12的包给后端。

总结:

只要不最小化浏览器以及在同一个浏览器中切换标签页
其他情况都不会被检测。

本来还想写个简单的插件来搞定,但是雨课堂的检测实在太辣鸡了,完全没必要,那就这样吧。

另外发现提交答案发包的时候是提交的上传的图片url标签,而这个参数又是我们可控那么也可以往里面插xss,例如这个样子

我在自己建的试卷里面测试,确实可以弹窗。同理老师在查看这份试卷的时候也是可以触发执行的。

至于做什么,大家就可以自行发挥了,哈哈。

7月14日补充:

刚好今天有老师让我们帮他测试一下,雨课堂的考试系统。我就趁机试了一下。开启Charles抓包,先切出页面触发js上报异常。

分析流量

同时老师那边会显示我考试异常。

从图中可以看到会记录切出和切回页面。根据分析,是用action的值决定的,12是切出,16是切回。

因为截图是先上传到七牛云,然后再把链接发送给后端,所以直接拦截七牛云的域名也可行。

所以直接拦截一下url即可以绕过检测了。

  • https://upload-z1.qiniup.com/
  • https://examination.xuetangx.com/online_proctor/stu/monitor/feed/add
  • https://examination.xuetangx.com/online_proctor/stu/photograph/add

浏览器上可以安装广告插件来拦截url,比如 block site 这个插件。

此时任何操作都可以了,监考端也没有任何的异常记录了。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

3条评论

匿名 发布于10:12 下午 - 11月 7, 2020

这本来就不是为了防信科院的

匿名 发布于11:39 下午 - 9月 29, 2020

6666

避坑指南 发布于6:01 下午 - 7月 18, 2020

虽然看不懂,但是丝毫不妨碍膜拜