前言

js全称JavaScript是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。这是官方的介绍,现在部分网站会在登入功能上,采用js定义算法对我们登入提交表单的数据进行加密,采用js加密客户端和服务端的流程分别是。

客户端用户登入->数据获取->数据加密->发送数据

服务端接收数据->数据解密->逻辑判断->返回结果

采用js定义算法加密的

无加密

可以很明显看出区别,第二个就不用说了,如果我现在要对第一个网站进行密码爆破,在我不清楚具体的加密算法的情况下是爆破不了的,因为我们抓包,替换数据采用的明文,根据我们上面列的流程,对方服务器上会进行解密,这能解出来个毛。所以我们的目的是寻找对方的加密算法,把我们要提交的明文数据进行加密,我这里介绍两种方法。

全局搜索

通过抓包参数名进行代码全局搜索,我们直接复制登入文件的url地址,全局搜索,看对方哪个文件有包含这个url地址,这种在文件不是很多的情况下比较方便。

Ctrl+Shift+F搜索对应url

一下就找到调用加密算法的文件,往上找到加密的类,我们直接在控制台new实例,再引用。

成功对我们输入的字符串进行了加密。

流程断点

通过审查元素抓网络请求包发起程序

这里要注意点,我们看堆栈的逻辑顺序是由下到上,我们根据字面意思选择login查看跳转,断点后重发数据包

可以看到它这一步已经把我们提交的数据加密了,所以我们往上一步跟就能看到对应代码了,后续就和前一种一样了。

实战案例

上海交大js算法逆向

打开网站尝试登入,查看数据包发现password进行了加密,我们查看堆栈进行分析

跳转发现对应代码,下断点,重新发包,发现password的值已经改了,我们往前面看

发现rsa关键词,应该是它的加密算法,还有一个o,应该是key,然后它这里是new JSEncrypt这个类,我们找到定义它的文件,复制,放到js运行环境中,我这里使用在线环境,再加上它调用执行的代码,修改一下。

运行

那当我们找到对方的加密算法后,我们就可以使用burp的插件来帮我们爆破时自动加密

Burp插件jsEncrypter使用

插件介绍:jsEncrypter是一个用于前端加密Fuzz的Burp Suite插件,可以对数据进行加密,方便对加密数据输入点进行fuzz,比如可以使用于前端加密传输爆破等场景。

除插件外我们还需要下载一个phantomjs

插件使用也是非常简单

我们先把我们找到的js加密文件保存到插件目录下,插件目录下有一个phantomjs_server文件,我们对这个文件进行修改

然后使用phantomjs运行phantomjs_server.js

phantomjs phantomjs_server.js

运行之后会监听本地1634端口,我们打开burp选择插件,测试连接

点击connect按钮,放回true即连接正常,再点击test测试加密

功能正常,现在对网站进行测试

抓取登入数据包,放到爆破模块中,把密码设置为替换值,然后加载插件

然后开始跑,看看效果

成功实现明文加密,接下就是我们正常的爆破逻辑了。

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。