0%

作死后的治疗与康复

前言

选课一时爽,绩点火葬场。人不作死就不会死,没事不能手贱瞎点。还好这次作死救回来了(大概)

作死的开始

今天教务处开放了选课系统,可以退掉之前选的选修课,也可以选想上的线上课程。然而由于坑爹的绩点计算方式,线上课程选的越多越吃亏。然而我脑子突然一抽:选个玩玩吧,大不了退了就是。等我确认选课后惊奇的发现:我*,退课按钮呢?这么大的退课按钮呢?这尼玛选了后没法退的???

尝试补救

分析退课请求

浏览器与网站通信肯定通过post或者get请求,正好我有能够退掉的课程,抓包看看退课请求的格式。

可以看到提交了几行神秘代码后课就退掉了。那么就有了下一个问题,这些神秘代码是什么呢?

分析js脚本

按f12审查网页源码,可以看到那个退课按钮后面的代码是这样的:

按钮里有三段神秘代码,通过在上下文中进行搜索,发现第一段出现在这个位置

猜测应该是对应着课程的某编码

第二段则出现在这里

这个就好猜了,是课程编码

至于第三段,通过选择多门可退的课程,发现第三段代码不会变动,大概是和当前用户绑定的识别码。

构造退课按钮

知道了神秘代码就构造出来目标退课代码。在目标课程的上下文中仔细搜索,找到了其对应的第一,第二段神秘代码。然后修改当前按钮的js代码,用拿到的目标代码替换原始代码,点击按钮,成功退课~

总结

经过如上操作,我成功的退掉了自己瞎选出来的课,在作死的边缘疯狂试探.jpg

虽然不知道现在后台数据库中的数据是个什么情况,不过至少不管怎么查我都看不到那门不该出现的网课了。

本次退课成功也从侧面暴露出来了学校网站的一个小漏洞:理论上来说我现在可以退掉任何一科课程。然而我不敢继续作死了,有谁想试试的话本人概不负责。同时希望网站管理员能够尽快修复漏洞,比如对每门课程的退课请求使用不同的密码之类。

最后,有可能这次只是管理员忘了开放退课按钮……