声明:
本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
名称:六房间
目标:登入参数
加密类型:SHA1
目标网址:https://v.6.cn/channel/index.php?src=z9weij928.
第一步: 查看接口参数
加密值:password,nonce
动态变化值: servertime
第二步: 搜索参数名
我们直接搜关键词password就可以定位到如下这个位置,这里我们可以看到我们要的参数都是哪来的nonce,servertime都是从S中去取出来的password则是根据我们输入的密码根据S.encode("" + S.encode(S.encode(Q) + S.servertime) + S.nonce)生成的,那我们接下来的目标就是找到这个S是哪来的并且这个S是什么东西
我们网上找发现S=this; 我们在控制台打印一下S发现这不是当前这个a这个大字典吗?问题迎刃而解那我只要找到a.servertime、a.nonce、a.encode 就可以还原加密逻辑了!
我们直接搜索参数可以找到这么一个赋值的地方,我们可以看到这里的Q像是一个返回值,那流程有没有可能是我在请求登入前他会先请求一遍获取nonce、servertime 然后再带入加密密码再发起第二次登入请求呢?
我们带着我们的疑惑去找一下接口,https://passport.6.cn/sso/prelogin.php?这个接口下的返回值不就是我们刚刚在断点处看到的返回值吗?
至此参数部分我们已经搞定了,接下来就搞定加密方法那整个加密流程我们就完全搞定了!接下来我们进去S.encode点击红圈的部分进入方法
进来之后我们可以看到卧槽这不就是sha1么,我们现在要确定的是这个SHA1是不是魔改后的如果是魔改后的我们就需要扣代码或者补环境的方式,如果是没有魔改的那我们直接调用第三方包不j就可以直接实现了么?
接下来我们将网页上生成的password和我们用原生SHA1方法生成的password作比较
用SHA1加密123456 对比输出的值
网址password: 7c4a8d09ca3762af61e59520943dc26494f8941b
原生SHA1: 7c4a8d09ca3762af61e59520943dc26494f8941b
这里我们可以看到两个值是一样的说明网站上的SHA1是没有魔改的所以我们就可以直接用第三方库去实现这个加密方法
第三步:实现加密参数
var CryptoJS = require('crypto-js')
S = {
encode:function(data){
return CryptoJS.SHA1(data.toString()).toString();
},
servertime:1659925658,// 动态值要从接口获取
nonce:"EJ15b6Uw"//动态值要从接口获取
}
// test 测试SHA1值
// console.log(S.encode(123456))
Q = 123456
password = S.encode("" + S.encode(S.encode(Q) + S.servertime) + S.nonce)
console.log(password)
结果展示:
看完点个赞吧,喜欢的可以点个关注!