58同城post登陆参数分析,典型的eval加密js案例

58同城的前端登陆js处理还有很有自己的特色的,藏匿了关键的js语句、同时混插了html源码和js,搜索关键词基本上都是html源码,但是还有事方法还原post参数的来源,下面我们一步步分析。
在这里插入图片描述

首先抓个post包看看有哪些参数

source: passport
password: 42ef99ddfcfed534a8c9f9745d853451802ec173ff6b39914e219912ca90942130fe0fd220e7aa6d29e67ff29b6ec038f8f489c542ae544dea172aa7a54ad3dd560c7d1d20ce3289d1015cd7839c0d3d9fc7574be3d6fa53c84270c6aa0f8ffd436ced4a2434dc4b95e7e21b5bae4ea180580fa6db483dbb2aa8dc87f0b8ace4
timesign: 
isremember: false
callback: successFun
yzmstate: 
fingerprint: 745425B5EABE10D036C02171090EC40FC1D13ECB0F632851_011
path: https://cd.58.com/?pts=1547035234514
finger2: zh-CN|24|1|4|1366_768|1366_728|-480|1|1|1|undefined|1|unknown|Win32|unknown|3|false|false|false|false|false|0_false_false|d41d8cd98f00b204e9800998ecf8427e|d21717e01c541ae877c90b4be8200041
username: 18328491111
validcode: 
vcodekey: 
btnSubmit: 登录中...

就从这个包我们可以大致分析一下:

password是RSA加密的样子,需要分析

fingerprint像一个身份ID,需要分析

path像一个固定字符串加上时间戳,不需要分析

finger2感觉像浏览器的一些环境信息可以做固定值,不需要分析

明确我们需要分析两个字段password、fingerprint

全局搜索一下password关键词,看看那些地方出现过

在这里插入图片描述

在这里插入图片描述

只有上面两处很可疑,但是很明显难以顺藤摸瓜了,尝试了很多关键词以后,没有结果,然后在看网站文件结构倒还发现了一些东西。

在这里插入图片描述

login文件夹下有个rsa的文件,那很明显就是密码加密所用的RSA了,打开看看

在这里插入图片描述

果然不简单eval开头,在看看这js文件内容:

在这里插入图片描述

关键信息都是编码了的,无法直接搜索,先eval解密,解密之后就很好辨认了

在这里插入图片描述

再看eval解密后的js文件尾部,有下面一个函数

function encryptString(str, e, m) {
    var key = RSAUtils.getKeyPair(e, '', m);
    return RSAUtils.encryptedString(key, str)
}

这就是熟悉不过的RSA加密方式了,那现在从RSA加密逆向搜索encryptString关键词,还真找到了有用信息

 var timesign = (new Date).getTime() + timespan;
                $("#p1User").val(encryptString(timesign + encodeURIComponent($("#passwordUser").val()), $("#rsaExponent").val(), $("#rsaModulus").val()));
                $("#password_value").val($("#passwordUser").val());
                $("#btnSubmitUser").val("登录中...");
                $("#usernameUser").addClass("fontcolor_cccUser").attr("readonly", "readonly");
                $("#passwordUser").val("").addClass("fontcolor_cccUser").attr("readonly", "readonly");

其中关键js代码:

 encryptString(timesign + encodeURIComponent($("#passwordUser").val()), $("#rsaExponent").val(), $("#rsaModulus").val())
这就是密码加密的方式无疑,没有涉及到一个关键词,要搜索关键词定位js的话是不可能的;$("#passwordUser").val()), $("#rsaExponent").val(), $("#rsaModulus").val(),这三个参数分别是从页面获取id为passwordUser、rsaExponent、rsaModulus的值,那我们去和html搜索这三个关键词分别得到下面信息:

用户输入的密码

在这里插入图片描述

RSA加密偏移量01001

在这里插入图片描述

RSA密钥

在这里插入图片描述

那这三个RSA加密的参数有了,加密过程就不复述了。

var timespan = 1411093327735 - (new Date).getTime();
var timesign = (new Date).getTime() + timespan;
var pwd = encryptString(timesign + encodeURIComponent(password, iv, pubkey);

接着来看fingerprint字段

全局搜索fingerprint或者其值都没有发现有可用的信息,最后实在没招了,才想起来还cookie没看,然后在cookie中找到了有用信息

在这里插入图片描述

ppStore_fingerprint经过URL解码后加上+011就是fingerprint

至于validcode、vcodekey几个字段在没有验证码的情况下都是空;

总体来说58同城的前端加密还是有点意思的,至少要让很大部分人琢磨好一会了,文中只是分析了整个流程,由于时间限制没有用python进行验证,有兴趣的网友可以试试,同时可以保持交流和学习。


ID:Python之战

|作|者|公(zhong)号:python之战

专注Python,专注于网络爬虫、RPA的学习-践行-总结

喜欢研究技术瓶颈并分享,欢迎围观,共同学习。

独学而无友,则孤陋而寡闻!


猜你喜欢

转载自blog.csdn.net/weixin_41624982/article/details/86183630
今日推荐