JS逆向:某专科学院的教务管理系统js逆向记录
发表于:2024-08-18 |

在现代信息社会,很多高校的教务管理系统通过网络提供学生成绩查询、选课、课表查询等功能。然而,某些系统在实现上存在一些不合理之处,导致用户体验不佳,甚至存在安全隐患。本文将以某专科学院的教务管理系统为例,通过对其前端JavaScript代码进行逆向分析,揭示其中的漏洞,并提出改进建议。

一.前言

pc端的教务系统太老,使用旧时代的jsp技术,看不懂,索性就往移动端逆向

二.寻找登录页面

在逆向过程中,发现移动端为两个页面

移动端登录页面

f12打开控制台可以看到跳转地址为:http://jwxt.hnbemc.cn:80/bzb_njwhd/loginSsom
第二个页面是http://jwxt.hnbemc.cn/#/login (这里就不放第二个页面的图片了因为全文围绕第一个页面所逆向)

三.逆向分析

登录页面也找到了,开始看看api携带的什么,一般登录用户的密码会加密后发送给服务端

所以这里打开f12,开始打断点

1
2
3
4
5
6
let params = {
'userName': user,
'password': encrypt(password),
'wxfwhopenid': wxfwhopenid+"",
'dllx': dlzdlx()
}

可以看到,user和password传给params对象,这里的password很明显调用了encrypt传进去了password进行加密
此时不要松开断点,直接在控制台打印这个encrypt函数

可以看到打印出来一个加密方法,这里我点击这个方法不知道为啥会跳转到

这个页面,先不管,继续分析输出的方法。这里…是被省略了,用’…’展开符也没用,不过这里猜测也能猜得出,就少了个retrun,下面是完整的encrypt方法

分析encrypt加密

1
2
3
4
5
6
7
8
    // encrypt加密
encrypt(word)
{
let key= CryptoJS.enc.Utf8.parse("qwertyuiqwertyui");
let srcs= CryptoJS.enc.Utf8.parse(word);
let encrypted= CryptoJS.AES.encrypt(srcs,key,{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7)
return encrypted.toString();
}

可以看到,声明了一个key为CryptoJS,我去网上查了下CryptoJS是一个加密库,这个key就是加密需要用的密钥,这行代码将字符串”qwertyuiqwertyui”转换为一个UTF-8编码的字节数组,用作AES加密的密钥。AES-128加密算法需要一个16字节的密钥,而这个密钥正好是16个字符(即16字节),接下来我们逐一分析

分析srcs加密

1
2
// srcs
let srcs = CryptoJS.enc.Utf8.parse(word);

word猜测是password,这行代码将传入的明文字符串word转换为一个UTF-8编码的字节数组,以便进行加密。

分析AES加密

1
2
// encrypted 
let encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });

这行代码使用AES加密算法对明文进行加密。它使用了ECB模式(Electronic Codebook mode)和PKCS7填充方式。ECB模式是一种较为简单的块加密模式,但安全性不如其他模式(如CBC模式)。

最后就是将加密后的数据转换为字符串并返回。

1
return encrypted.toString();

由此看来密钥直接放在方法很不安全,不过如果不放逆向工程又得麻烦一倍😂

四.最后

本文介绍了高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的方法。通过学习这些知识,你可以更好地理解密码加密技术的原理,并掌握一定的逆向分析技巧。请注意,逆向分析可能涉及到法律问题,请在合法范围内进行研究和实践。

五.累计更新

由于长度的问题,关于这篇文章后面还会继续更新获取token逆向,由于我是第一次发博文,所以有哪些不好的地方请大家见谅,也可以提出要求我会加进更改(ง •̀_•́)ง‼

上一篇:
vite+vue3+ts 显示找不到模块“../views/HomeView.vue”或其相应的类型声明。ts(2307)