前提
本篇博客写于2021.04.15,博客内容存在时效性,请注意辨析内容是否依旧有效。
正文
抓个包,一眼就看到大大的/x/passport-login/web/login
看看数据,来源+明文账号+密文密码+跳转链接+验证码数据,听标准的一个登陆口子。
验证码数据token/challenge/validate/seccode
都是联网交互返回的,没啥加密的,不作分析。
直接来看password
字段。
为了方便追js栈,去DevTools里抓一波,发现调用堆栈还挺多,并且函数名还做了混淆。
不过疑似关键处的地方不知道为啥没混淆。
最开始的那个疑似堆栈如下,目测确实是登录模块的起调入口。
然后跟一下login
函数,发现DevTools跟偏了,不过问题不大,上下找一下还是可以找到的。
其中很明显的一段字段包装语句。
跟一下encryptPassword
函数。
发现似乎是服务器实时生成密钥对然后返回公钥的加密方式。
因为RSA用公钥加密后的数据是有随机化处理的,所以并不唯一,而没有私钥又没法解密抓包的数据,所以验证咱们加密思路正确的唯一方法就是写个脚本模拟登录。
但是我懒得去验证了,就把思路发一下吧,基本上可以确定是对的。
接收hash
和key
,分别作为盐和公钥,然后将hash
和密码拼接后RSA一下,就是传递的密码密文。
Comments NOTHING