dede 网站地图 模块,南京cms建站系统,数据分析公司,linux wordpress 3010x00 抓包分析简单的搜索之后发现#xff0c;很多参数都是登陆上面这个请求返回的值#xff0c;这个请求在输入完账号光标到达密码框时就会生成!0x01 加密逻辑分析搜索su可以很快找到加密的位置#xff0c;上图看到e.su和e.sp都是由sinaSSOEncoder这个函数生成的#xff0c…0x00 抓包分析简单的搜索之后发现很多参数都是登陆上面这个请求返回的值这个请求在输入完账号光标到达密码框时就会生成!0x01 加密逻辑分析搜索su可以很快找到加密的位置上图看到e.su和e.sp都是由sinaSSOEncoder这个函数生成的搜索sinaSSOEncoder发现就是这个js也就是说把当前js全部拷贝下来就可用这里可以得知su是由账号加密得到function getSu(user) {
return sinaSSOEncoder.base64.encode((user))
}me.rsaPubkey,me.servertime,me.noce这三个值都是由服务器返回的值不多做解释!最后这个b则是我们的密码e.sp也就是处理完后的b值function getSp(me,pwd) {
var f new sinaSSOEncoder.RSAKey;
f.setPublic(me.pubkey, 10001);
b f.encrypt([me.servertime, me.nonce].join(t) n pwd);
return b
}在当前js文件中搜索prelt得知是由preloginTime生成preloginTime就是一个时间戳减一个停顿后的时间戳其实可以设置为一个随机数function getPrelt() {
exectime Math.floor(Math.random() * (20 ‐ 300 1) 300)
return exectime
}0x02 代码编写1.获取nonce、rsakv等参数import json
import re
import requests
import execjs
session requests.session()
prelogin_url https://login.sina.com.cn/sso/prelogin.php
login_url https://login.sina.com.cn/sso/login.php
username username
password password
with open(login.js,r,encodingutf‐8) as f:
login_js execjs.compile(f.read())
su login_js.call(getSu,username)
params {
entry: weibo,
callback: sinaSSOController.preloginCallBack,
su: su,
rsakt: mod,
checkpin: 1,
client: ssologin.js(v1.4.19),
_: 1578127327125,
}
prelogin_resp requests.get(prelogin_url,paramsparams)
result re.search(rsinaSSOController.preloginCallBack((.*?)),prelogin_resp.text).group(1)
result_json json.loads(result)
print(result_json)2.获取跳转链接data {
entry: weibo,
gateway: 1,
from:,
savestate: 7,
qrcode_flag: false,
useticket: 1,
pagerefer: ,
vsnf: 1,
su: su,
service: miniblog,
servertime: result_json[servertime],
nonce: result_json[nonce],
pwencode: rsa2,
rsakv: result_json[rsakv],
sp: login_js.call(getSp,result_json,self.password),
sr: 1920*1080,
encoding: UTF‐8,
prelt: login_js.call(getPrelt),
url: https://weibo.com/ajaxlogin.php?framelogin1callbackparent.sinaSSOController.feedBackUrlCallBack,
returntype: META,
}
resp session.post(login_url,datadata)
print(resp.text)3.获取跳转链接location re.search(rreplace((.*?));,resp.text).group(1)
resp session.get(location)
print(resp.text)4.最后请求location re.search(rreplace((.*?));, resp.text).group(1)
resp self.session.get(location)
print(resp.text)5.登陆验证到此为止已经是成功登陆了最后再请求一下主页如果返回的源代码中有自己的用户名那么说明我们已经登陆成功了#Python学习群592539176
resp self.session.get(https://weibo.com/)
print(resp.text)