jsEncrypter for Burp [绕过前端加密]

  • Naykcin
  • 5 Minutes
  • November 24, 2019

jsEncrypter for Burp [绕过前端加密]

💡 0x00 思路

在测试登录站点或挖 src 的时候,遇到 web 登录口,提交登录信息的时候抓包查看,会发现很多 web 站点提交的用户名和密码都是经过 js 加密的,这样在爆破时就遇到了问题。

虽然 burp 自带很多 hash 加密算法,例如 md5,sha1,sha512 等,但是如果遇到开发人员前端自己写的 js 加密,就有些麻烦。

由此可以展开思路:

  1. 既然是前端 js 加密,代码我们都可以看到,那么我们搭个服务器,每次发包前,把要发送的加密参数用服务器加密一遍,再把加密后的参数发送出去,就相当于本地还原了加密过程。
  2. 如果有 js 基础,能看懂开发人员写的 js 加密过程,那么就可以本地简化,自己写脚本去跑,生成加密后的字典直接 burp 去跑也可以。

这里 jsEncrypter 是黑客 c0ny1 的作品,相当于思路 1 和 2 的结合,可以用插件方便地跑起来。

📍 0x01 安装与配置

首先安装 maven。Mac 直接 brew 安装即可。

$ brew install maven

安装 phantomjs,方法较多,可用 brew 安装。

$ brew cask phantomjs

git clone 源码,或者直接下载 release 版本。

$ git clone https://github.com/c0ny1/jsEncrypter

cd 到 jsEncrypter 目录,maven 编译。

$ mvn package

编译好后会多出一个 target 文件夹。

屏幕快照 2019-11-29 下午1.59.45-5009661

test 文件夹是本地测试 demo 和常见加密算法的 js 脚本,script 脚本就是自带的 phantomjs 服务端模版文件,每次运行需要根据情况修改。

然后把 target 文件夹里的 jar 插件添加到 burp。

屏幕快照 2019-11-29 下午2.03.40

如图所示添加成功。

屏幕快照 2019-11-29 下午2.08.33

📍 0x02 测试

将 jsencrypter/test/webapp 文件夹移动至 web 服务目录,把本地服务器搭建起来,然后访问 web 服务。

image-20191129141357229

抓包显示密码经过了加密。

屏幕快照 2019-11-29 下午2.46.19

F12 调试源码

屏幕快照 2019-11-29 下午3.08.30

可以看到 js 文件下一共有五个加密函数文件,这里调用了 JSEncrypt() 函数,分析应该是调用了 jsencrypt.js 文件。这里还 set 了一个 publickey,于是在 index 文件下再次搜索 publickey。

屏幕快照 2019-11-29 下午3.10.52

可知 public_key 是一个隐藏标签,post 时一同提交,接下来可以开始改写 phantomjs_server.js 文件。

改写时要注意修改引入实现加密的 js 文件,其他的修改红框内的内容即可。

屏幕快照 2019-11-29 下午3.18.09

然后运行 server 文件。

phantomjs encrypt.js

屏幕快照 2019-11-29 下午3.20.04

如果有报错,一般是未修改引入实现加密的文件 xxx.js。

然后 burp 打开插件,地址及端口默认即可,点击 connect 链接,连接成功会显示 true,点击 test 会根据算法在右边生成密文。

屏幕快照 2019-11-29 下午3.27.06

此时 phantomjs 服务端会收到加密请求并生成密文,可以稍后用作对照来破解正确密码。

屏幕快照 2019-11-29 下午3.24.36

接下来可以结合 burp 的 Intruder 模块来进行爆破,抓包发送至 Intruder,设置密码字段为 position,加载一个字典,选择 payload processing 为 jsencrypter。

屏幕快照 2019-11-29 下午3.28.57

start attack。

屏幕快照 2019-11-29 下午3.34.58

爆破成功,将成功的 payload 前几位字母在 terminal 中进行搜索,发现明文是 admin。到这里测试成功结束。