在现代信息社会,很多高校的教务管理系统通过网络提供学生成绩查询、选课、课表查询等功能。然而,某些系统在实现上存在一些不合理之处,导致用户体验不佳,甚至存在安全隐患。本文将以某专科学院的教务管理系统为例,通过对其前端JavaScript代码进行逆向分析,揭示其中的漏洞,并提出改进建议。
一.前言
pc端的教务系统太老,使用旧时代的jsp技术,看不懂,索性就往移动端逆向
二.寻找登录页面
在逆向过程中,发现移动端为两个页面


f12打开控制台可以看到跳转地址为:http://jwxt.hnbemc.cn:80/bzb_njwhd/loginSsom
第二个页面是http://jwxt.hnbemc.cn/#/login (这里就不放第二个页面的图片了因为全文围绕第一个页面所逆向)
三.逆向分析
登录页面也找到了,开始看看api携带的什么,一般登录用户的密码会加密后发送给服务端
所以这里打开f12,开始打断点
1 | let params = { |
可以看到,user和password传给params对象,这里的password很明显调用了encrypt传进去了password进行加密
此时不要松开断点,直接在控制台打印这个encrypt函数
可以看到打印出来一个加密方法,这里我点击这个方法不知道为啥会跳转到
这个页面,先不管,继续分析输出的方法。这里…是被省略了,用’…’展开符也没用,不过这里猜测也能猜得出,就少了个retrun,下面是完整的encrypt方法
分析encrypt加密
1 | // encrypt加密 |
可以看到,声明了一个key为CryptoJS,我去网上查了下CryptoJS是一个加密库,这个key就是加密需要用的密钥,这行代码将字符串”qwertyuiqwertyui”转换为一个UTF-8编码的字节数组,用作AES加密的密钥。AES-128加密算法需要一个16字节的密钥,而这个密钥正好是16个字符(即16字节),接下来我们逐一分析
分析srcs加密
1 | // srcs |
word猜测是password,这行代码将传入的明文字符串word转换为一个UTF-8编码的字节数组,以便进行加密。
分析AES加密
1 | // encrypted |
这行代码使用AES加密算法对明文进行加密。它使用了ECB模式(Electronic Codebook mode)和PKCS7填充方式。ECB模式是一种较为简单的块加密模式,但安全性不如其他模式(如CBC模式)。
最后就是将加密后的数据转换为字符串并返回。
1 | return encrypted.toString(); |
由此看来密钥直接放在方法很不安全,不过如果不放逆向工程又得麻烦一倍😂
四.最后
本文介绍了高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的方法。通过学习这些知识,你可以更好地理解密码加密技术的原理,并掌握一定的逆向分析技巧。请注意,逆向分析可能涉及到法律问题,请在合法范围内进行研究和实践。
五.累计更新
由于长度的问题,关于这篇文章后面还会继续更新获取token逆向,由于我是第一次发博文,所以有哪些不好的地方请大家见谅,也可以提出要求我会加进更改(ง •̀_•́)ง‼