校园网自动登录Python版 您所在的位置:网站首页 校园网portal自动认证 校园网自动登录Python版

校园网自动登录Python版

2023-10-21 03:13| 来源: 网络整理| 查看: 265

深澜校园网自动登录 1.分析api

连接到校园网,自动弹出登录认证界面 http://172.16.100.32/srun_portal_pc?ac_id=1&theme=basic 在这里插入图片描述

先输入错误的账号密码,按F12看会获取哪些信息 在这里插入图片描述

get_challenge 请求方式为get,地址为 http://172.16.100.32/cgi-bin/get_challenge 在这里插入图片描述

请求的数据为 在这里插入图片描述

参数分析callbackjsonp解决跨域的参数username校园网账户ip本机自动获取到的ip_当前时间戳(32)位

参数分析完毕,看看服务器返回的什么吧 在这里插入图片描述

这里是不需要分析的。唯一需要注意的是challenge,因为太过诡异。

srun_portal 请求方式为get,地址为 http://172.16.100.32/cgi-bin/srun_portal 在这里插入图片描述

请求数据为 在这里插入图片描述

看到这一大串,可能不太好下手。确实参数有点多。 多观察几次,先找不变的参数,排除掉。

参数分析callback和第一次的callback意思一样,排除actionloginusername账户ac_id1(意义不详,每次都一样可以排除了)ip自动获取的ipn200(和ac_id一样排除)type1(和ac_id一样排除)oswindows10namewindowsdouble_stack0_当前时间戳(13位)

一共14个参数,一下子pass11个,还剩下3个参数分别是 password chksum info 接下来开始分析js文件,一共4个 在这里插入图片描述

搜索关键字:password 在这里插入图片描述

这个是什么,这个不就是我们请求的参数吗,一下全都出来了,继续搜索对应关键字。 在这里插入图片描述

hmd5就找出来了,是经过md5加密之后的密码,还做过加盐处理 至于token就是之前的challenge

接下来是chksum一样的方法,搜索关键字。 在这里插入图片描述

可以发现是简单的字符串拼接。然后用sha1加密得出chksum。 可是还有个i是什么呢。继续找吧 在这里插入图片描述

都出来了,对象转为字符串之后进行xEncode(天知道是什么加密方式)进行加密,反正也是加盐的加密。也用到了token。之后再进行一次base64加密。i就出来了 i出来了,chksum也出来了。顺序不能错。 处理顺序

参数加密方式passwordHmac MD5加密chksumsha1处理

3个参数都需要用到token,至于加密方式更加是坑 只有sha1和md5是可以直接用的。 xencode更加不知道是什么鬼东西,base64是经过改动的。和正常的base64是不一样的。

2.分析加密

python版的xencode

import math def force(msg): ret = [] for w in msg: ret.append(ord(w)) return bytes(ret) def ordat(msg, idx): if len(msg) > idx: return ord(msg[idx]) return 0 def sencode(msg, key): l = len(msg) pwd = [] for i in range(0, l, 4): pwd.append( ordat(msg, i) | ordat(msg, i + 1) 6) & 63)]); x.append(_ALPHA[(b10 & 63)]) i=imax if len(s) - imax ==1: b10 = _getbyte(s, i) 18)] + _ALPHA[((b10 >> 12) & 63)] + _PADCHAR + _PADCHAR); else: b10 = (_getbyte(s, i) 12) & 63)] + _ALPHA[((b10 >> 6) & 63)] + _PADCHAR); return "".join(x)

md5

import hmac import hashlib def get_md5(password,token): return hmac.new(token.encode(), password.encode(), hashlib.md5).hexdigest()

sha1

import hashlib def get_sha1(value): return hashlib.sha1(value.encode()).hexdigest()

流程总结

第一次get_challenge是获取token。中间做了3个信息的处理最后一步就是登录和认证了 3.模拟登录 import requests import time import re from encryption.srun_md5 import * from encryption.srun_sha1 import * from encryption.srun_base64 import * from encryption.srun_xencode import * header={ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36' } init_url="http://172.16.100.32" get_challenge_api="http://172.16.100.32//cgi-bin/get_challenge" srun_portal_api="http://172.16.100.32/cgi-bin/srun_portal" get_info_api="http://172.16.100.32/cgi-bin/rad_user_info?callback=jQuery112406118340540763985_1556004912581&_=1556004912582" n = '200' type = '1' ac_id='1' enc = "srun_bx1" def get_chksum(): chkstr = token+username chkstr += token+hmd5 chkstr += token+ac_id chkstr += token+ip chkstr += token+n chkstr += token+type chkstr += token+i return chkstr def get_info(): info_temp={ "username":username, "password":password, "ip":ip, "acid":ac_id, "enc_ver":enc } i=re.sub("'",'"',str(info_temp)) i=re.sub(" ",'',i) return i def init_getip(): global ip init_res=requests.get(init_url,headers=header) print("初始化获取ip") ip=re.search('id="user_ip" value="(.*?)"',init_res.text).group(1) print("ip:"+ip) def get_token(): # print("获取token") global token get_challenge_params={ "callback": "jQuery112404953340710317169_"+str(int(time.time()*1000)), "username":username, "ip":ip, "_":int(time.time()*1000), } get_challenge_res=requests.get(get_challenge_api,params=get_challenge_params,headers=header) token=re.search('"challenge":"(.*?)"',get_challenge_res.text).group(1) #print(get_challenge_res.text) print("token为:"+token) def do_complex_work(): global i,hmd5,chksum i=get_info() i="{SRBX1}"+get_base64(get_xencode(i,token)) hmd5=get_md5(password,token) chksum=get_sha1(get_chksum()) print("所有加密工作已完成") def login(): srun_portal_params={ 'callback': 'jQuery11240645308969735664_'+str(int(time.time()*1000)), 'action':'login', 'username':username, 'password':'{MD5}'+hmd5, 'ac_id':ac_id, 'ip':ip, 'chksum':chksum, 'info':i, 'n':n, 'type':type, 'os':'windows+10', 'name':'windows', 'double_stack':'0', '_':int(time.time()*1000) } # print(srun_portal_params) srun_portal_res=requests.get(srun_portal_api,params=srun_portal_params,headers=header) #print(srun_portal_res.text) if __name__ == '__main__': global username,password username="24217407159" password="151232" init_getip() get_token() do_complex_work() login() res=requests.get(get_info_api,headers=header) print("用户",username,'登陆成功!')

查看截图 在这里插入图片描述

登录成功

码云的仓库地址 https://gitee.com/yshbcom/auto_srun.git



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有