Cra1gTucker / hust-login

login scripts for HUST_WIRELESS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

hust-login

Command line login scripts for HUST_WIRELESS Wi-Fi, which enables logging into the campus network without a browser.

2021-3-24: 发现Bash脚本加密时openssl报错,排查加密出错原因,结果发现pubkey.pub有问题(E值错了),但修正后还是登录失败。再对网页登录界面进行调试,结果发现在网页登录时调用的rsa实现库采用的端序方式似乎与openssl不一样,故Bash脚本不需要反转密码,同时为密码增加了两次URL Encode以与官方网页保持一致 PS:不懂Python/Powershell,暂时不改

2020-9-29: 学校工作人员认为老的加密算法不安全(JavaScript注释里写着的原话),于是修改了RSA密钥和服务端的解密方式。好像没有对加密算法做任何更改呢。 现在服务端不再接受PKCS#1 V1.5 padding的密文了,只接受不知从哪复制过来的JavaScript库里写的一种奇怪的padding,而恰好Pycryptodome又不支持自己写padding,更巧的是deprecated的Pycrypto却正好能够方便地实现这种padding,理论上使用后者或者shell脚本因为本来就是手写的padding甚至几乎不用改代码(正在测试当中)。

由于某些不可描述的原因,目前校园网密码使用了RSA加密而不是之前的明文传输。经检验hust_wireless.py仍然可以使用,但是没有任何安全性,本repo中含有根据当前登录方式重写的登录脚本。

用法

您可以根据需要选择下面的Python脚本或Shell脚本。

Python脚本


hust_login.pyhust_login_nocrypt.py使用Python内置的urllib,使用时直接用python3运行即可

  • hust_login.py 依赖Pycrypto Pycryptodome进行密码的加密,需要用户自行安装两模块中的任意一个
  • hust_login_nocrypt.py 不依赖任何第三方模块,但是不进行加密,只是在原版本的POST参数后添加了passwordEncrypt=false以告知服务端接收明文

Shell脚本


如果您不是Python选手出于某些原因没有安装Python,可以使用本脚本登录

脚本依赖curl,openssl,grep以及一个bash-compatible的shell,大多数Linux发行版(甚至macOS)都已包含上述包。Alpine?不存在的

为了使用本脚本,您需要下载hust_login.sh以及pubkey.pub并置于同一目录中,后者存放了加密使用的RSA公钥

该脚本接受用户名作为唯一可选参数或向用户询问用户名,由于尝试完全按照校园网提供的JavaScript进行RSA padding造成脚本中有些可读性较差的部分(事实证明学校程序员认为这一padding有其高明之处,自2020年起只接受这种padding的密文了),请忽略

FAQ

为什么使用Pycrypto和使用Pycryptodome进行加密得到的密文不同?

Pycrypto(以及校园网JavaScript)RSA加密使用的是全零padding,而Pycryptodome默认使用PKCS#1 V1.5 padding,这导致二者密文不同且后者每次加密得到的密文均有不同,但是事实证明经过后者padding的密文仍然可以被服务端成功解密。但由于后者加密padding带有随机数据实际上防止了对密文进行爆破,所以使用后者其实是更安全的选择。

注意:现在校园网只认全零padding,后者无法使用。

服务端返回“设备未认证”?

实际使用中发现极少数情况下服务端会返回“设备未认证”消息,由于再次运行发现可以成功登录,所以未研究此现象的原因(可能是使用urllib没有存Cookie的原因?),出现上述情况,重新运行可以解决问题。自2020年起添加了一个参数,如果用的是之前的版本,请更新。

About

login scripts for HUST_WIRELESS

License:GNU General Public License v3.0


Languages

Language:Python 61.1%Language:Shell 29.9%Language:PowerShell 9.0%