记一次对优学院和云班课的前端代码审计

Admin 2020-05-06 146人围观 ,发现0个评论 代码审计

许多大学使用一些在线学习平台来安排和调查作业。 作为计算机专业,我还喜欢研究Web安全。 正确地做作业当然不是我的风格。 我会完成的。


蓝墨云班课——破解视频进度不可控

我校部分专业课老师经常在云班课上发布一些“教学资源文件”,每看完一个视频或文件,都会被后台记录并获得对应的经验值。

先来一张成果图

记一次对优学院和云班课的前端代码审计 Web安全 第1张

由于之前测试过学习通,直接重放视频观看结束后的包是不可行的。后端的数据说到底还是从前端JS传过去的,于是这次决定从前端入手,直接修改前端的值,符合程序逻辑一点。

随便打开一个视频看看情况

记一次对优学院和云班课的前端代码审计 Web安全 第2张
记一次对优学院和云班课的前端代码审计 Web安全 第3张

最下边一条灰色的bar,是进度条,看着像自己做的那种。先打开F12看看情况。

记一次对优学院和云班课的前端代码审计 Web安全 第4张

直奔目标,审查进度条元素,发现有事件监听器,展开事件监听代码,看看功能。

记一次对优学院和云班课的前端代码审计 Web安全 第5张

哟西,有注释,看一遍学生们就懂了,是个好程序员,往下翻翻。

记一次对优学院和云班课的前端代码审计 Web安全 第6张

联系上下文,高亮部分的代码作用大概就是:

  • 计算已看进度和总进度的百分比

  • 按百分比绘制进度条

  • 设置当前看过的视频时间

既然那么简单明了,那么就直接Ctrl-C,打开Firefox控制台

记一次对优学院和云班课的前端代码审计 Web安全 第7张

直接定义一个函数,将进度调整到9999,调用自定义函数。可以看到,9999明显超长,绘制的进度条已经超出了屏幕宽度,预期的效果有了。
有同学之前质疑,前端只是表面,那么后端数据更新了吗?刷新一下看看。

记一次对优学院和云班课的前端代码审计 Web安全 第8张

很OK,50分钟的视频,一两分钟就看完了,美滋滋。


优学院——破解视频进度不可控+获取选择题答案

第一部分 破解视频进度

优学院相对于云班课来说,就麻烦了一点。

还是先上一张成果图。

记一次对优学院和云班课的前端代码审计 Web安全 第9张

随便打开一个视频

记一次对优学院和云班课的前端代码审计 Web安全 第10张

按照之前的测试方法,打开F12,审查进度条元素。

记一次对优学院和云班课的前端代码审计 Web安全 第11张

前后翻了一下,只有这段代码有事件监听器,而且代码已被混淆处理,难以阅读。既然这样,就直接去调试器里看看了。

记一次对优学院和云班课的前端代码审计 Web安全 第12张

翻了一下文件,盯上了PageViewModule.js,文件名可疑,参数和注释更可疑。

记一次对优学院和云班课的前端代码审计 Web安全 第13张

这段代码的逻辑比较明了,大概是这样:

  • 如果观看时间>=视频总长度,视频进度设置为100,此判断可能是为了防止数值过大出现异常。

  • 如果观看进度>=95%,视频进度设置为100,此判断可能是为了容错。

这段代码中有个方法被多次调用:element.record(),由第二个判断条件来看,element.record().status(1)可以直接把视频状态更新为已看完。
去控制台直接改一下试试

记一次对优学院和云班课的前端代码审计 Web安全 第14张

element变量不存在,有几种可能,pageViewModule.js可能没有被直接引用,element可能是一个当前作用域无法访问的局部变量。那么,就下一个断点,刷新页面试试。由于代码中的两处逻辑判断,条件不成立,无法跳入,那么,我选择在第一个判断前下断点,就是下图中的第765行。

记一次对优学院和云班课的前端代码审计 Web安全 第15张

刷新页面,运行到断点,js停止。

记一次对优学院和云班课的前端代码审计 Web安全 第16张

输入代码,element.record().status(1),回车

记一次对优学院和云班课的前端代码审计 Web安全 第17张
记一次对优学院和云班课的前端代码审计 Web安全 第18张

刷新页面看一下,后端数据是否更新

记一次对优学院和云班课的前端代码审计 Web安全 第19张

很OK,破解完成

第二部分 获取选择题答案

这个就比较简单了,BurpSuite挨个抓包,每个选择题对应一个题目ID,通过一个接口,可以获取对应题目ID的答案。

记一次对优学院和云班课的前端代码审计 Web安全 第20张
记一次对优学院和云班课的前端代码审计 Web安全 第21张



结语

之前我一直把Web安全的重心放到后端,其实实际场景中,前端也会出现很多小问题,而且JavaScript是重点关注对象。


请发表您的评论
请关注微信公众号
微信二维码
不容错过
Powered By 蚁人博客