JS安全-算法逆向
前言
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测试加密
功能正常,现在对网站进行测试
抓取登入数据包,放到爆破模块中,把密码设置为替换值,然后加载插件
然后开始跑,看看效果
成功实现明文加密,接下就是我们正常的爆破逻辑了。
免责声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。