再谈前端js加密抗衡

前言

上一篇我们提到了,在遇到js加密的时候,我们可以通过js-forward、jsrpc注入或者mitmproxy做中间代理进行数据转发等方式进行前端加密的抗衡,最近有些师傅给我推荐了另一种解决方案:jsEncrypter(burp插件)+phantomjs,说实话,之前还真没实践过,果然还是技术太菜,跟不上时代步伐!

正文

用小皮开个测试环境

一个简易的web登陆框,并且可以进行base64,md5,RSA等加密方式

工具:
phantomjs:https://phantomjs.org/download.html
burp插件jsEncrypter:https://github.com/c0ny1/jsEncrypter/releases

(这里我将这两个工具放在一个目录下了)

PhantomJS是一个基于webkit的javaScript API。jsEncrypter依赖phantomjs,启动前端加密函数对数据进行加密,phantomjs会返回加密结果传给burp,因此此插件需要启动phantomjs开启服务,burp去读取结果。

先看一下md5加密:抓包,,嗯还是熟悉的味道..

使用f12大法,过滤关键词password定位可疑加密函数,并打上断点发送数据包

通过单步调试,发现定位到了一个md5.js

将加密的js代码复制下来,另存为本地,与phantomjs和jsEncrypter放在一个目录下

修改phantomjs_server.js文件,这里要改两个地方,第一个,引入刚才的js加密文件即md5.js,第二个,加上调用文件中的主函数

保存好之后,启动phantomjs,但是我报错了….(当时排查半天,就是一个劲的报错)

上网一搜,才找到解决方案:在环境变量中加入如下值,使phantomjs能够找到指定的文件

1
export OPENSSL_CONF=/etc/ssl

再次启动phantomjs并指定phantomjs_server.js文件运行,ok

我们可以发现开了一个端口并启动了一个服务端,打开burp加载插件,并连接phantomjs启动的webserver,如果显示绿色True,则表示连接成功,test测试一下,左边的字典确实转成md5加密了

加入字典后,在intruder模块中加载该插件(Invoke Burp extension)

最后开始爆破,可以看到是成功的

其他加密方式也是同理的,接下来再简单说说RSA,现在抓个包看一下,嗯..依旧是熟悉的味道

假设现在有这么一个场景:通过js敏感信息泄漏,泄漏了一个公钥(额..现在几乎很少出现公钥泄漏的情况了,主要是看方法)

然后还是老样子,找加密函数、打断点,发现定位到了一个jsencrypt.js

依旧老样子复制加密代码,保存本地,随后编辑phantomjs_server.js文件,这里添加调用文件中主函数的写法和其他加密算法有一点不同,需要加入公钥

随后burp连接phantomjs,并且可以看到字典都进行了RSA加密,ok

爆破当然也是ok的


再谈前端js加密抗衡
http://example.com/2024/09/19/再谈前端js加密抗衡/
作者
liuty
发布于
2024年9月19日
许可协议