Python实现JS RSA加密登录

又有师傅被登录RSA加密没法用BurpSuite爆破困扰,原先写的Python调用JS函数生成密文字典丢给它,似乎没法理解,我自己回过头看了一遍,确实不太好理解,重新写一个稍详细些的好了。

在开始之前,先看看JS实现加密登录的代码(假设你可以看懂HTML和JS,并且能够看源码找到Button是如何触发和调用哪个函数实现登录的)

大致就是login函数从表单取数据,从/getkey获取exp和mod,再用encryptedString加密,最后/checkAuth发起登录

知道用的是RSAUtils.encryptedString函数做的加密,就很简单了。

首先需要安装PyExecJS库

pip install PyExecJS -i https://pypi.douban.com/simple

接着测试一下模块是不是可用的,成功计算输出2

Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import execjs
>>> execjs.eval("1+1")
2

确认正常后,开始找RSAUtils这个对象存在哪个JS文件里,这次发现是一个security.js,对比一下有没有encryptedString函数就知道

现在,就可以用PyExecJS库,直接加载security.js,调用RSAUtils对象的encryptedString,实现RSA加密

先把security.js保存下来,再用PyExecJS解析security.js文件

import execjs

js = open("security.js", encoding="utf-8").read()
jo = execjs.compile(js)

print(jo.eval("window.RSAUtils.encryptedString(window.RSAUtils.getKeyPair('010001', '', '00a3a0198d37a227c4a711be14a0da30f22c041c8f1d07524516276a6759bd9387c0d318228d7d5a89cd577f043ddddede458e548ffd48b11a63d27cd66ac1a094db5f1836aa28cca69fa8c3a4ced3c57ad7960c5bae26e95affa92362a38ed0e0a75482a92ae7007d101cd84d06cfba6a99380a612766483e58a27ca5b7fc023d'), encodeURIComponent('123456'))"))

//exp为010001
//mod为00a3a0198d37a227c4a711be14a0da30f22c041c8f1d07524516276a6759bd9387c0d318228d7d5a89cd577f043ddddede458e548ffd48b11a63d27cd66ac1a094db5f1836aa28cca69fa8c3a4ced3c57ad7960c5bae26e95affa92362a38ed0e0a75482a92ae7007d101cd84d06cfba6a99380a612766483e58a27ca5b7fc023d
//密码 123456

写成一个函数

之后,就可以读取字典,一个个生成了,就是… 速度有点小慢🙄

遇到的问题

刚开始执行的时候提示window未定义,搜索得知window对象来自于浏览器

execjs._exceptions.ProgramError: TypeError: 'window' 未定义

有的人用PhantomJS启动浏览器来执行,那真的慢中加慢,好在有其他解决办法

在security.js中添加var window = {}; 得以解决

《Python实现JS RSA加密登录》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注