js逆向·找到登录时目标网站的加密算法的几种方式

为什么要去找到目标网站的加密密码方法:

为了要把我们的payload正确的带入目标网站的服务器进行逻辑验证,那么就需要知道对方使用的什么加密或者编码规则来处理数据的,比如说我们输入的密码被base64编码了,然后发送给后端,后端会进行解码过后再带入逻辑验证中去判断你输入的密码账号正确与否,那我们要测试有没有安全问题,输入一些恶意参数的话自然也需要把我们输入的payload进行同样的base64编码,这样在发送给服务器时,服务器才能正确的进行解码然后进行逻辑验证,如果你不用同样的编码规则的话,服务器无法正确解码,那逻辑验证就更不可能成功了。所以要记住一点,如果目标网站有加密或者编码数据的情况,一定要找出它然后同它保持一致。

前置知识:

作用域:简单来说就是程序运行起来时相关的数据值有哪些

调用堆栈:调用堆栈里的程序意思就是发起此请求时有哪些程序参与其中;这里面的程序执行顺序是从下到上的

XHR:全称 XML HTTP Request

分析调试方法:

-文件流程断点

-代码全局搜索

-XHR提交断点

本文只介绍通过这三种方法找到加密算法的点;自己愿意用哪种就用哪种,反正学这三个的目的都只有一个。即找到目标网站的加密方法

  1. 第一种方法:文件流程断点

    • 点击登录之后,查看相关的数据包,可以在负载里发现我们输入的数据都被加密了;原本输入的明文手机号被加密成不认识的东西

    • 也可以在发起程序的选项卡里查看,发起此数据包时有哪些相关的程序参与其中​

      在相关的程序里选择一个你觉得最有可能是跟加密算法函数沾边的那个文件,然后点击进去查看(根据经验判断的,实在不行就一个个检查吧)我觉得最有可能的就是login.js文件了,所以我点击login那个js文件,跳转至相关代码上去了​​​​

      一看好多跟加密相关的东西那应该是找对了,找到关键的加密函数这,下一个断点在附近,然后再去点击一遍登录,让程序跑起来卡在这,然后再去控制台验证一下加密函数。

    • (为什么要断点后再去控制台进行验证呢?:因为如果不打断点的话程序一下就执行完成了,创建的变量啊,相关的数据也会直接在内存空间销毁,到时候你再去使用相关的函数方法,涉及到的变量什么的都已经不存在了,会报错提示你未定义相关函数或者变量,所以我们要设置断点让程序运行起来又不至于直接结束,趁相关方法还存在于内存当中的时候使用目标网站的相关函数达到目的)​

      这样就可以保证我们的payload跟目标网站使用相同的加密算法来加密数据了

  2. 第二种方法:全局代码搜索

    • 按住ctrl+shift+f在搜索里面去搜索关键字,什么加密啊,密码啊,password啊pass等关键字,快速定位到关键的相关代码上去,同样可以找到login.js这个加密文件,加密的函数方法也就在这个文件里面。怎么使用这个加密函数?同上面那个断点一样

      ​​​​

  3. 第三种方法:XHR提交断点

    • 在网络选项卡里找到此数据包请求的路径是哪个,然后把这个路径复制下来,到源代码选项卡里添加进去。

      添加完成后再次点击登录,就可以达到一个目的,即如果在运行程序的过程当中,如果URL涉及到你添加进去的路径时,程序会停下来。如下图:

      那就跟上面的一样了,在涉及的相关程序里找到你觉得跟加密方法相关的js文件,点进去找就行了。同样可以找到login.js 这个文件

最后再补充一点:​

上面说过作用域里面的值,就是程序运行到这一步时涉及到的相关的变量啊什么的此时的值。意思就是我刚才在网站输入的数据手机号啊,密码啊等明文数据,到这一步的时候,已经被加密成了密文了,那说明加密的动作也就在此之前了。找加密函数的时候也就该往上看了,或者就在附近。

但是我们在测试的时候需要测试的payload实在太多,一个一个这么试吗?显然是不太合适的。那就需要结合一些其它工具来批量实现了。这篇虽然简单,但是太长了,打算下一章再说。可以自己去了解一下jsEncrypter插件还有phantomjs-2.1.1-windows这两个东西,前者是burp的插件,后者是一个配合这个插件使用的可执行程序