51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

某教务系统登录逆向分析

本篇文章作者 ius,本文属 i 春秋原创奖励计划,未经许可禁止转载
原文链接:https://bbs.ichunqiu.com/thread-63833-1-1.html

某教务系统登录逆向分析

前言 {#toc_0}


image-20240123081743636 image-20240123081743636


这个系统相信很多高校都在用,有时候期末出成绩,我们经常会吃完饭看看,打完游戏看,刷完抖音看看,睡醒一觉也得看。这次带大家分析一下这个系统的登陆参数,还有验证码如何识别。 {#toc_1}

目标参数: {#toc_2}


image-20240123082014787 image-20240123082014787


正文 {#toc_3}

我们全局搜索csrftoken

可以看出来这是后端生成的一个随机值,然后被隐藏了起来


image-20240123082254962 image-20240123082254962


在元素中找到这个值,然后右键复制->复制XPath


image-20240123082603914 image-20240123082603914


复制出来的是这样的//*[@id="csrftoken"]我们在后面加上/@value意思是取这个元素中的属性值,运行测试,没有问题


image-20240123082818929 image-20240123082818929


然后我们全局搜索encrypt

为什么搜这个呢,这是因为在前端加密中,经常会用到这个加密函数,如果是没有混淆的网站,搜这个一般都可以搜出来

然后我们找到了密码加密的位置

打上断点,重新提交测试


image-20240123083236707 image-20240123083236707


成功断点


image-20240123083753922 image-20240123083753922


我们可以看出来,这是一个RSA加密,先是将公钥中的模数和指数转为hex,然后进行设置

这里的公钥是网络请求出来的


image-20240123084130278 image-20240123084130278


流程有了,我们先把js代码模拟出来。


image-20240123084400816 image-20240123084400816



image-20240123084437474 image-20240123084437474


跟浏览器的对比一下,可以看出是一样的


image-20240123084453940 image-20240123084453940


然后测试一下modulus


image-20240123084718775 image-20240123084718775



image-20240123084727489 image-20240123084727489


可以发现也是没有一点点问题的

接着,我们来模拟一下RSA加密

先在终端安装node-rsa

npm install node-rsa


image-20240123085408092 image-20240123085408092


安装成功后我们导入

开始模拟

经过一番测试之后

我发现node中传递公钥需要传递Buffer流

所以不需要b64tohex...


image-20240123090541865 image-20240123090541865


现在加密模拟出来了,我们来模拟登录流程

首先,请求登录页面,获取csrftoken

然后,请求公钥接口,获取publickey

最后,使用公钥对密码进行RSA加密


image-20240123091600929 image-20240123091600929


加密参数都模拟好了,我们来请求测试一下

因为频繁的测试,导致出现了验证码


image-20240123092056627 image-20240123092056627


这里我们使用ddddocr来识别验证码

写入到本地来查看是否相同


image-20240123092939976 image-20240123092939976


运行

可以看到,识别出来的是一样的


image-20240123093003010 image-20240123093003010



image-20240123093009424 image-20240123093009424


然后我们开始提交请求

提示我们密码不正确???


image-20240123100335241 image-20240123100335241


这里我们检查一遍流程

发现没有任何问题

密码也确定是对的

那只有一种可能

就是加密出来的密码不对

然后我们开始一一对照


image-20240123100526490 image-20240123100526490


我们查看对比浏览器的加密后16进制数

因为使用的是rsa加密。所以每次结果都会不相同,这里我们无法对比

我们测试加密后的结果,有何不同


image-20240123100613288 image-20240123100613288


可以发现,经过base64编码后的结果不相同

第一个是使用通用base64进行编码

第二个是使用此处的base64函数编码

可以发现这里的是魔改base64

我们选择直接复制此处的base64文件


image-20240123100730630 image-20240123100730630



image-20240123100949211 image-20240123100949211



image-20240123100957709 image-20240123100957709


再次编码发现结果相同了


image-20240123100924620 image-20240123100924620


导出函数


image-20240123101505973 image-20240123101505973



image-20240123101520502 image-20240123101520502


再次运行

还是报错?!


image-20240123100335241 image-20240123100335241


此处我再次怀疑是我加密方式不对

然后我选择将整个rsa加密文件扣下来

使用他使用的加密方式,我这还能错??

运行测试


image-20240123121427998 image-20240123121427998


???????

此处省略1万的问号

还说我密码不正确???

在这里,我浪费了大量的去反复检验

流程是否错误

加密是否错误

检验到最后发现,一样的不能再一样了

这是怎么回事?


image-20240123100335241 image-20240123100335241


其实这里使用了大名鼎鼎的TLS指纹校验

TLS指纹不同于ua,是比较底层的一种标识

那我们怎么解决呢?

使用curl-cffi库,就能完美的解决这个问题

pip install curl-cffi


image-20240123122037191 image-20240123122037191



image-20240123122051890 image-20240123122051890


然后再次运行

成功!


image-20240123122126297 image-20240123122126297


后记 {#toc_4}

这次登陆分析其实没想到会花费这么久的时间

因为加密参数很清晰明了

只不过没仔细分析是否进行了魔改

最后放弃自己模拟,直接扣出魔改后的代码

结果还是无法登录

这又让我怀疑是不是流程出错了

然后又反复调试了半天

还是没办法

最后的最后,想尝试一下tls指纹

结果成功了

只能说不可小觑天下英雄

没想到这个教务系统还会做tls校验

没想到啊,是真没想到啊

赞(4)
未经允许不得转载:工具盒子 » 某教务系统登录逆向分析