NVDB(工业和信息化部网络安全威胁和漏洞信息共享平台)前端签名还原
这网站登录要验证码,我想一直保持登录,就准备定时去请求后端服务保持登录态,结果没注意到它有签名。
看了一下其实签名很简单。

先看了下个人信息部分,后端返回加密的,前端解开了,先验证下在哪里脱敏的,有的系统是后端脱敏,有的偷懒就在前端脱敏。
既然解密了邮箱,先搜一下 decrypt 看看

找到了几个解密方法,直接去 app......js 里面看

这里是加解密方法,下面有两个密钥,其实可以猜一下,长的是私钥(别问我为什么)
然后验证下

成功解析了,是一个私钥(为什么不用 AES 呢?这样不就是后端用公钥加密,前端用私钥解密了)

解密成功,果然是前端脱敏的。
下面看看请求签名吧。

每个 api 的请求都有个 signature 的请求头
这个签名由两部分组成,其实见得多了就知道,这里就是时间戳+MD5
我们先搜索 signature

直接锁定了,定位过去打断点就行了。

下断点,触发请求,这里主要看Object(h.a)(o, n)

第一部分断点下错了,应该在 app 里面下,不影响,现在已经断到了

这里就是 a+;+o,a 是时间戳跟上面的猜测是一样的,o 是 Object(f.a)(a, n)的结果,n 就是请求体,直接单步进去

这里就是核心方法了,其实很简单,自己分析或者直接下断点就行了
r 就是 md5
无非就是i = e + "," + a + ",1e31af8c14999aa99d78537a8641ea4d"或者c = e + ",1e31af8c14999aa99d78537a8641ea4d"

1770360125648,10,1,1e31af8c14999aa99d78537a8641ea4d
时间戳+请求体中 json 的键值对的值+固定字符串

1770360125648,10,1,1e31af8c14999aa99d78537a8641ea4d的 md5 结果为:20736f5e42b82db8c5d0c92bdd89c262

后端请求的签名和我们拿得原文再 MD5 的签名一模一样,这里报错是因为断点时间太长导致请求的时间戳超时,实际上算法是对的。
你真试啊