063-Web攻防-JS断点调试&Burp插件模块等

知识点

JS分析调试知识点:

1、JavaScript-作用域&调用堆栈
2、JavaScript-断点调试&全局搜索
3、JavaScript-Burp算法模块使用

JavaScript-作用域&调用堆栈

JS断点

前置知识

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

    • 简单来说就是运行后相关的数据值
  2. 调用堆栈:(由下到上)

    • 简单来说就是代码的执行逻辑顺序
    • image-20250615162928913
  3. 常见分析调试方式

    • 代码全局搜索:通过抓包参数名进行代码全局搜索
    • 文件流程断点:审查元素抓网络请求包发起程序
    • 代码标签断点:审查元素对应标签按钮加入断点
    • XHR提交断点:审查元素源代码加入XHR断点配置
  4. 学习JS分析调试作用

    • 针对JS开发应用
    • 密码登录枚举爆破
    • 参数提交漏洞检测
    • 泄漏URL有更多测试

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

    CTRL+SHIFT+I:进入浏览器开发者模式

JavaScript-断点调试&全局搜索

全局搜索

测试域名:https://my.sto.cn/

  1. 如果网站数据是通过js传输的,那么就需要有请求的路径包含在js代码里。通过寻找登录的数据包,找到登录时请求的url地址,在js代码中全局搜索,加密的代码就在上面的代码里

  2. 在首页进行登录 查看数据包 发现 这里对我们的用户名 手机号 密码均进行了加密 从安全测试的角度来说 这对我的爆破 以及枚举来说是非常不利的 我们要在js里面查找有没有加密的方式

    image-20250615164614411

  3. 第一种方式 在标头这搜索路径 CTRL+SHIFT+F对路径关键字进行搜索
    往上翻找到了加密传参的地方 如果直接调用加密会显示没有声明 我们还需要找到他的声明方式

    • image-20250615170013082

    • image-20250615170435758

    • image-20250615170721970

  4. 找到调用的地方 尝试控制台调用 在进行加密 最后加密成功

    • image-20250615171007186

    • image-20250615171237623

文件流程断点:

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

  1. 在网络里面的发起程序或者启动器里面可以看到请求调用堆栈 在LoginResult请求参与的时候有哪些文件进行抓包 按照上面的图片的逻辑顺序来说我们应该重点看ajax和login这两个地方的js 因为这里是对数据逻辑进行加密可能出现的地方

    请求调用堆栈:的调用逻辑是从下向上执行

    • image-20250615171616960
  2. 我们在这里进行断点 并且重新登录 浏览器进行暂停 在logindata这里鼠标放上去 发现我们的账户密码 已经加密 右边的几个箭头 可以对函数进行操作这里不用这个

    1. 作用域这里显示的是logindata里面的数据 在numcode和nummobile这里还没有进行加密 但是在logindata这里已经进行加密了
    2. 在调用堆栈这里可以查看数据的操作变化 调用堆栈的执行顺序是从下往上
      用过鼠标点击 在匿名和login这里发现对我们传入的数据进行了加密 ctrl单击进行了发现就已经对进行了执行
    3. logindata在这里已经加密完成了 所以我们要重点找这个在哪里出现看看有没有什么关键字
    4. 从encrypt这里找到了加密算法的来源文件 在和刚刚全局搜索一样操作了
    • image-20250615172811666
    • image-20250615173453562
    • image-20250615173514323
    • image-20250615175118190
    • image-20250615175722991

标签断点

  1. 在登录界面进行f12 选中登陆框 找到事件 选中 右键选择发生中断条件 选中属性修改
  2. 点击登录后即可进行断点
    • image-20250615180437308

XHR断点

  1. 先进行登录 在网络这里我们发现它的类型是xhr
  2. 在网络这里 选中其中具有代表性的地址 这里是Vip/LoginResult
  3. 在源代码里面 点击top 在xhr/提取断点哪里点击 加号 将刚刚的路径填进去 这里浏览器监控请求到我们添加的路径的时候进行断点
  4. 点击登录在send进行了断点 然后在作用域和调用堆栈哪里进行分析 思路跟上面一样
    • image-20250615180725559
    • image-20250615180808536
    • image-20250615180925884
    • image-20250615181207570

案例演示

https://account.hpc.sjtu.edu.cn/#/login

  1. 这里使用文件断点 进行登录 在f12在网络这里 启动器找到请求调用堆栈 在value这里点进去 在login这里进行断点
  2. 在这一步中,a 是需要加密的原始数据(例如用户密码)。调用 encrypt 方法后,a 被公钥加密,生成加密后的字符串 这里o是我们进行的密钥
  3. 到控制台调用 加密成功 找到js的加密文件 负责里面的代码 到js在线执行平台上面 替换C.RSACODE为具体的密钥 打印执行
    • image-20250615183139664
    • image-20250615183654106
    • image-20250615183747345
    • image-20250615183811375
    • image-20250615194124080

JavaScript-Burp算法模块使用

  1. 下载phantomjs 将目录复制 粘贴到环境变量里面记得重启

  2. 打开burpsuite 在Extensions哪里加载jsEncrypter插件 选中你插件的路径

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

    1. 在前面断点的地方 找到JS加密方式 将里面的内容另存为文件 放在插件目录jsEncrypter.0.3.2里面

    2. 打开目录里面的phantomjs_server.js文件 将文件里面的xxx.js名字修改为刚刚保存算法文件名的JSEncrypt.js

    3. 讲代码写入到模版中(引用JS和调用加密)编写调用加密函数进行加密的代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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;
    }
    1. 运行刚写入的模版文件后插件连接测试phantomjs xxxxx.js

    2. 正常对登录进行抓包 选中密码 在爆破模块添加字典

    3. 在payload processing里面add - Invoke burp extension:jsEncrypter 加载插件

      • image-20250617130509644

      • image-20250617130958052

      • image-20250617131034285

      • image-20250617131306981

      • image-20250617164741866

      • image-20250617154015746

      • image-20250617155400732

      • image-20250617155453321

      • image-20250617160217745

      • image-20250617160423140

      • image-20250617164029432