【js逆向教程】某童年游戏网站登录逆向

前言

现在大部分网站在登录的时间为了防止暴力破解,都会进行加密,通常使用AES、RSA等加密方式,在前端js运行的时间进行加密,今天我们就来学习一下对于加密的登录方式,怎么进行爆破测试。

登录测试

首先打开网页点击登录,打开F12进行抓包测试

图片[1]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享

查看抓包可以发现,我们的密码加密为:

图片[2]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享

很明显,这个我们在不知道加密规则的情况下,没办法进行爆破测试

逆向测试

通过搜索url后缀:/login.do?v=1,可以定位到函数:check_login

图片[3]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享

继续全局搜索函数:check_login

/*登陆*/
function check_login(u, p, c, errDivId) {
	if (!setErr(errDivId, Validaton.CheakUsername(u.value), u)) {
		return false;
	}

	/* 密文传输 */

	var _p = document.getElementById(p);
	var $secv = document.getElementById("j-sec").value;
	var _psdInit = $secv == 1 ? encryptAES(_p.value) : _p.value;
	document.getElementById("j-psd").value = _psdInit;

	if (_p && !setErr(errDivId, Validaton.CheakPWD(_p.value), _p)) {
		return false;
	}
	if (c && !setErr(errDivId, Validaton.CheakCaptcha(c.value), c)) {
		return false;
	}
	return true;
}
function check_edit_nick(n, errDivId) {
	if (!setErr(errDivId, Validaton.CheckNick(n.value), n)) return false;
	return true;
}

通过注释我们也可以发现,就是这里进行了加密,打两个断点进行测试

图片[4]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享

可以发现,断点成功停在这里,并且出现的加密值和最终提交的值相同

图片[5]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享

继续跟踪可以发现,就是使用的AES加密,这里使用js本地加密测试一下

function encryptAES(IdVal) {
	return CryptoJS.AES.encrypt(IdVal, "lzYW5qaXVqa").toString();
}

本地新建1.js文件,内容为:

const CryptoJS = require('crypto-js');


function encryptAES(IdVal) {
  return CryptoJS.AES.encrypt(IdVal, "lzYW5qaXVqa").toString();
}

console.log(encryptAES('asdf'));
图片[6]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享

运行结果一样,这里需要注意的是,需要使用npm安装库crypto-js

npm install crypto-js

接着就是构造python登录脚本即可

import requests
import execjs

def run_javascript_file(file_path,passwd):
    with open(file_path, "r") as file:
        javascript_code = file.read()
        ctx = execjs.compile(javascript_code)
        return ctx.call("encryptAES",passwd)  # 调用你的JavaScript函数



def login(user,passwd):

    cookies = {
        'home4399': 'yes',
        'UM_distinctid': '18934bc983c356-0eab2284e290b2-67075953-190140-18934bc983d911',
        'Hm_lvt_334aca66d28b3b338a76075366b2b9e8': '1688806922',
        'Hm_lpvt_334aca66d28b3b338a76075366b2b9e8': '1688806922',
        '_gprp_c': '""',
        'USESSIONID': '7dc9967f-ce18-43c4-bb23-698ad9c06e80',
        'phlogact': 'l132528',
    }

    headers = {
        'Connection': 'keep-alive',
        'Pragma': 'no-cache',
        'Cache-Control': 'no-cache',
        'sec-ch-ua': '";Not A Brand";v="99", "Chromium";v="94"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'Upgrade-Insecure-Requests': '1',
        'Origin': 'http://ptlogin.4399.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Core/1.94.200.400 QQBrowser/11.8.5310.400',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'Sec-Fetch-Site': 'same-origin',
        'Sec-Fetch-Mode': 'navigate',
        'Sec-Fetch-User': '?1',
        'Sec-Fetch-Dest': 'iframe',
        'Referer': 'http://ptlogin.4399.com/ptlogin/login.do?v=1',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        # Requests sorts cookies= alphabetically
        # 'Cookie': 'home4399=yes; UM_distinctid=18934bc983c356-0eab2284e290b2-67075953-190140-18934bc983d911; Hm_lvt_334aca66d28b3b338a76075366b2b9e8=1688806922; Hm_lpvt_334aca66d28b3b338a76075366b2b9e8=1688806922; _gprp_c=""; USESSIONID=7dc9967f-ce18-43c4-bb23-698ad9c06e80; phlogact=l132528',
    }

    params = {
        'v': '1',
    }

    data = {
        'loginFrom': 'uframe',
        'postLoginHandler': 'default',
        'layoutSelfAdapting': 'true',
        'externalLogin': 'qq',
        'displayMode': 'popup',
        'layout': 'vertical',
        'bizId': '',
        'appId': 'www_home',
        'gameId': '',
        'css': '',
        'redirectUrl': '',
        'sessionId': '',
        'mainDivId': 'popup_login_div',
        'includeFcmInfo': 'false',
        'level': '0',
        'regLevel': '4',
        'userNameLabel': '4399用户名',
        'userNameTip': '请输入4399用户名',
        'welcomeTip': '欢迎回到4399',
        'sec': '1',
        'password': run_javascript_file("1.js",passwd),
        'username': user,
        'autoLogin': 'on',
    }

    response = requests.post('http://ptlogin.4399.com/ptlogin/login.do', params=params, cookies=cookies, headers=headers, data=data).text
    print(response)


if __name__ == "__main__":
    login("2912655897","2912655897")

这里就是使用python调用刚刚创建的1.js,然后构建登录包即可。测试账号:2912655897,2912655897

需要修改为自己的js地址,还有自己的账号密码,即可成功登录

'password': run_javascript_file("1.js",passwd),
login("2912655897","2912655897")
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容