• 高校教务系统登录页面JS分析——合肥工业大学


    高校教务系统密码加密逻辑及JS逆向

    本文将介绍高校教务系统的密码加密逻辑以及使用JavaScript进行逆向分析的过程。通过本文,你将了解到密码加密的基本概念、常用加密算法以及如何通过逆向分析来破解密码。

    本文仅供交流学习,勿用于非法用途。

    一、密码加密基本概念

    密码加密是一种保护信息安全的技术手段,它通过将明文(原始信息)转换为密文(加密后的信息),以防止未经授权的访问和篡改。常见的密码加密算法有MD5、SHA-1、SHA-256等。

    1.1 加密过程

    加密过程通常包括以下步骤:

    1. 密钥扩展:将密钥扩展为多个轮值,每个轮值都与明文的一部分有关。
    2. 初始轮值生成:将扩展后的密钥与轮常数进行某种运算,生成第一轮加密的密文。
    3. 多轮迭代:对密文进行多轮迭代操作,每轮操作都包括非线性函数、模运算和轮常数的变换。
    4. 最终密文:经过多轮迭代后,得到最终的密文。

    1.2 解密过程

    解密过程与加密过程相反,通过反向操作来恢复原始明文。通常需要知道加密时使用的密钥和算法。

    二、高校教务系统密码加密逻辑分析

    2.1 抓包

    我们首先打开教务系统的登录页面,我们可以看到,只有学号和密码,有的高校会有验证码,或者有的高校是错误一次密码,会验证验证码。

    我们打开开发者工具,尝试登录抓包,网页会返回这样的数据接口。

     我们看到只有密码被加密了,有的高校会加密用户名也就是学号,我们后面遇到再说。

    2.2 分析加密参数

    我们接下来,就是来分析这个密码是怎么加密的。我们全局搜索password。定位到加密的位置。

    我们可以看到,加密方法在这里,调用了encryptionPwd(password),下面,我们分析它是怎么产生的。

    三、JS逆向分析方法

    逆向分析是指从已知的加密文本或程序中还原出原始信息的过程。在本例中,我们将使用JavaScript编写一个简单的逆向分析工具,用于逆向高校教务系统的密码。

    环境使用

    • python 3.9
    • pycharm
    • node

    我们全局搜索encryptionPwd,定位到加密方法的位置。我们发现这些代码都在一块。

    代码实现

    我们先把这些代码扣下来,运行看看缺什么补什么。

    1. var CryptoJS = require("crypto-js");
    2. // 密码加密
    3. function encryptionPwd(pwd) {
    4. var secretKey = getCookie("LOGIN_FLAVORING"),
    5. key = CryptoJS.enc.Utf8.parse(secretKey),
    6. password = CryptoJS.enc.Utf8.parse(pwd),
    7. encrypted = CryptoJS.AES.encrypt(password, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}),
    8. encryptedPwd = encrypted.toString();
    9. return encryptedPwd;
    10. }
    11. // 获取cookie中的值 LOGIN_FLAVORING就是加密所需要的秘钥
    12. function getCookie(cname) {
    13. var name = cname + "=";
    14. var ca = document.cookie.split(';');
    15. for(var i = 0; i < ca.length; i++)
    16. {
    17. var c = ca[i].trim();
    18. if (c.indexOf(name)==0)
    19. return c.substring(name.length,c.length);
    20. }
    21. return "";
    22. }
    23. console.log(encryptionPwd(12345))

    我们运行之后,报错,提示我们ReferenceError: document is not defined,我们发现这里是获取cookie的值,我们可以先写死,要是想实现模拟登录,就要先从网页获取到cookie,然后,在传个这个加密函数。这里也是常规加密,是AES加密。

    我们修改完代码如下:

    1. var CryptoJS = require("crypto-js");
    2. // 密码加密
    3. function encryptionPwd(pwd) {
    4. var secretKey = getCookie("LOGIN_FLAVORING"),
    5. key = CryptoJS.enc.Utf8.parse(secretKey),
    6. password = CryptoJS.enc.Utf8.parse(pwd),
    7. encrypted = CryptoJS.AES.encrypt(password, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}),
    8. encryptedPwd = encrypted.toString();
    9. return encryptedPwd;
    10. }
    11. // 获取cookie中的值 LOGIN_FLAVORING就是加密所需要的秘钥
    12. function getCookie(cname) {
    13. var name = cname + "=";
    14. // var ca = document.cookie.split(';');
    15. var ca = [
    16. "JSESSIONID=bc7d281e867849ce8767b8ceaf750c7d",
    17. " LOGIN_FLAVORING=0ympagyta98tusie"
    18. ];//这个是cookie,想要修改
    19. for(var i = 0; i < ca.length; i++)
    20. {
    21. var c = ca[i].trim();
    22. if (c.indexOf(name)==0)
    23. return c.substring(name.length,c.length);
    24. }
    25. return "";
    26. }
    27. console.log(encryptionPwd(12345))

    运行后实现的效果:

    通过对比分析,和网页返回加密后的密码一样,说明,我们逆向成功了。就下来就是用python写代码了,这里就不过多赘述。

    安装crypto-js库

    使用npm或yarn来安装crypto-js

    npm install crypto-js

     

    四、总结

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

    五、累计更新

    争取到到底更新30所高校,大家可以在评论区留言。


    持续更新中

    安徽工程大学

    合肥工业大学

    6adf31c8c5dd4e6a83314f4805b30bc1.jpg

  • 相关阅读:
    Docker部署GItLab
    如何提高网络传输效率(TCP延迟确认与Nagle算法)
    《向量数据库指南》为什么要研发 Milvus Cloud?
    【JavaEE进阶序列 | 从小白到工程师】JavaEE中的抽象类和抽象方法
    图像变视频
    Vue常用但记不住的操作
    计算机毕业设计SSM电子学生证系统APP【附源码数据库】
    二叉树OJ练习题(C语言版)
    TypeScript逆变 :条件、推断和泛型的应用
    AUTOSAR汽车电子嵌入式编程精讲300篇-面向车载CAN网络的路由和ECU刷写方法 (下)
  • 原文地址:https://blog.csdn.net/BROKEN__Y/article/details/133794765