JS逆向-网络请求筛选&断点调试&调用堆栈&作用域&控制台分析&BP插件发包&安全结合

知识点:

1、断点调试&调用堆栈&作用域&控制台分析

2、BP插件发包&安全结合

前置知识

1、作用域:(本地&全局)

简单来说就是运行后相关的数据值

2、调用堆栈:(由下到上)

简单来说就是代码的执行逻辑顺序

3、常见分析调试:

这三种方法针对不同对象(搜索一般用来对付简单的,复杂点的就得用断点了)

-代码全局搜索

-文件流程断点(执行的代码经过哪些文件)

-代码标签断点

-XHR提交断点

4、为什么要学这个?

-针对JS开发应用

-密码登录枚举爆破

-参数提交漏洞检测(sql注入等)

-泄漏URL有更多测试

一、登陆算法-全局搜索&文件流程断点调试&XHR断点调试

测试地址:[https://my.sto.cn/](https://my.sto.cn/)

数据加密对安全测试的影响:

因为服务端接收到数据的时候会对该数据进行解密处理,如果用户提交的数据没有进行加密而是直接以明文方式传输给服务端,服务端在对这个明文进行解密操作得出来的就是一串乱码,无论用户密码是否正确肯定都会失败。

1、全局搜索:通过抓取参数名或者路径名来进行代码全局搜索

提交的地址如下图所示,所以我们全局搜素Vip/LoginResult(ctrl+shift+f)

那我们再回去看谁声明了encrypt

2、文件流程断点:审查网络请求包里的发起程序

点击发起程序中的login文件跳转

重新点击登陆后,页面显示已在程序调试中暂停,点击logindata显示加密后的数据

说明,数据在222之前就已经被加密,那我们需要再往前审查

调用堆栈点到(匿名)时,没有加密,下一个login时就加密了,说明加密过程是在154-222之间完成的

选中以下encrypt.encrypt话可以查看加密来源文件

3、代码标签断点:登录按钮检查

右键登录检查后,中断处选择子树修改和属性修改

不过此处申通登陆网址不是用此方法

换一个测试地址:https://account.hpc.sjtu.edu.cn/#/login

重复上述操作,点击登录

可以发现自动断点,也就是说,断点后的代码负责登录事件

4、XHR(XMLHttpRequest)提交断点

复制固定路径地址

添加后勾选

点击登录

发现作用域和调用堆栈和之前一样,后续步骤和之前一样了

二、登陆算法演示案例-文件流程断点&XHR断点

测试地址:[https://account.hpc.sjtu.edu.cn/](https://account.hpc.sjtu.edu.cn/)

文件流程断点:

![](https://cdn.nlark.com/yuque/0/2025/png/55522994/1765860182415-16ced134-3553-4d21-966e-7e46d8feadfd.png)

可以发现启动器也就是发起程序有很多,其中有一个value是值的意思,我们可以先点开看一下

有login字样,我们在此处断点并再点击登录

可以看到作用域有加密数据了

可以把放入控制台输出一下

发现可以运行,成功加密123

但最终目的不是在控制台运行,而是把整个加密代码运行出来

点击JSEncrypt

复制整段代码到在线编辑器里运行

密钥已知

运行结果如下

XHR断点

![](https://cdn.nlark.com/yuque/0/2025/png/55522994/1765862877372-494bc509-5da0-47c2-a96c-82edaa0106d6.png)

添加并勾选该XHR断点

重新登陆后,调用堆栈处找到value

后续操作和上文一致

三、演示案例-结合BurpSuite插件使用

测试域名还是[https://account.hpc.sjtu.edu.cn/](https://account.hpc.sjtu.edu.cn/)

:::color1
前提条件:

下载phantomjs并设置环境变量

BP加载jsEncrypter插件

:::

1、对逆向的加密算法提取JS文件及代码

![](https://cdn.nlark.com/yuque/0/2025/png/55522994/1765868974346-70ee6f2b-ccef-451c-86b1-70d8c884cb64.png)

将加密算法文件取出

2、将修改的代码写入phantomjs_server.js文件中

```java var wasSuccessful = phantom.injectJs('JSEncrypt.js'); //引用js

//调用加密代码
function encrypt(password){
var r = new JSEncrypt;
o = "xxxxxxxxx";
r.setPublicKey(o);
var s = r.encrypt(password)
return s;
}

// 处理函数(不要把调用加密代码直接写进去,容易卡死,单独写一个调用加密函数)
function js_encrypt(payload){
var newpayload;
/在这里编写调用加密函数进行加密的代码/
var newpayload=encrypt(payload);
/
********************************************************/
return newpayload;
}


写入该文件

![](https://cdn.nlark.com/yuque/0/2025/png/55522994/1765869262523-01b4525b-c0d3-4759-b094-767173d61fe5.png)

<h3 id="j5yuF">3、运行刚写入模板文件后插件连接测试</h3>
```java
phantomjs phantomjs_server.js

成功加密

4、正常设置发包后选择引用插件

![](https://cdn.nlark.com/yuque/0/2025/png/55522994/1765870141755-10059455-e30b-4bb9-909d-dfcf45ba3701.png)

成功发包,且都是加密后的算法

posted @ 2025-12-26 09:23  炫一勺饭  阅读(0)  评论(0)    收藏  举报