(此文中的图片托管于 Google Blogger,在国内访问可能无法显示,你懂的)
很早就发现了这样一个漏洞,这次把分析和实践过程都偷偷地写出来。
事先声明:本人以研究性的目的撰写这篇文章,目的不在于教唆大家晚交作业。至于您依本文操作产生的一切后果和责任请自负。此 BUG 已反馈给学校计算中心网络学堂开发人员并得到修复。
从原理上讲,网络学堂的提交控制现在有两个地方。第一个地方是课程作业那个表格最右边的“提交作业”按钮,如果过期了服务器会在 HTML 页面中把这个按钮禁用,变成不可点击的。这样就无法打开提交界面。然而实际的链接是在源代码中可以看到的,这样就毫无安全可言。
第二个地方是在提交界面上。本来这个控制是没有的,也就是说把第一个限制突破了就可以提交作业。但是第一个限制的突破太简单,稍微学习一点网页制作的知识就能搞定。所以后来就加上了这个限制。
这个限制的实现原理是这样的:服务器会判断当前的时间是否已经过期,如果是,则在返回的页面中加入了一个 JavaScript 的语句,当你点击“提交”时就会调用
function submitcheck() {
if(0==0){
alert("现在已经超过了提交作业的截止时间。请与任课教师联系。");
return false; }
}
结果就是跳出来一个消息框,告诉你已经过了截止时间,然后残忍地返回 false 终止提交。
当初我面临这个问题时,也想了好久应该怎么绕过。最先想到的是去分析 JavaScript 的提交过程,然而它这个提交是一个模块化的东西,还带有一个图形的上传进度条,分析起来并不容易。后来,我把目光集中到那个“if(0==0)”上面。正因为有这个,说明这个是由 JavaScript 控制的。而 JavaScript 本身的本地执行特性又决定了这一点其实是可以更改的。所以,突破就在这儿找到。
好了,理论原因分析做完了,现在该进行实践了。毛*主*席说过“实践是检验真理的惟一标准”,且让我们来试它一试。
工欲善其事,必先利其器。事先的 requirements 还是必须达到的。这里的要求很简单:要绕过第二个限制,必须使用 TheWorld 浏览器。它的下载页面是 http://www.ioage.com/cn/download.htm 下载的时候选择“绿色版”即可。
启动 TheWorld 浏览器,打开网络学堂。选择你要提交作业的课程,选择左边的“课程作业”那一栏。在右边页面的空白处点击鼠标右键,选择“查看源代码”,如图所示:
这样就打开了网页的源代码。看得懂的人在这儿一下就能明白。看不懂也没事,方法是固定的:选择“编辑”,“查找”,在查找框里输入作业的名字,比如“第三周课后作业”,就定位到了相关位置。在这一行再往下用目光搜索,可以看到“onclick=”javascript”这样的代码,喏,这就是我们要找的链接。把双引号之间的内容复制一下,然后贴到网络学堂的地址栏中,回车,就可以打开熟悉的提交页面了。这一步如图所示:
看到提交页面之后,第一关就算过了。第二关比较麻烦一点,需要用到 TheWorld 浏览器的“广告过滤”功能,这个功能本来是对付广告的,但这回用到解除限制上也非常之好用。在 TheWorld 浏览器中选择“工具”,“广告过滤”,“广告过滤选项”,如图:
在设置页面中找到“自定义过滤器”,勾上“使用黑名单过滤”,在下面的大框中填上一行“#ex#0==0###0==1”(不含这儿的引号),然后点击左边的“应用”即可。
回到提交作业的页面,按 F5 刷新一下(目的是为了使刚刚设的过滤器生效),然后就可以偷偷地提交作业啦。