记一次src挖掘过程中遇到的前端js加密爆破
字数 1205 2025-08-23 18:31:09

前端JS加密爆破绕过技术详解

1. 背景与概述

在渗透测试过程中,经常会遇到前端对用户名和密码进行加密处理的情况,这给传统的爆破攻击带来了挑战。本文详细介绍一种无需逆向分析JS加密算法,通过本地模拟加密过程实现爆破的技术方法。

2. 技术原理

该方法的核心思想是:

  1. 识别前端加密函数
  2. 下载所有相关JS文件
  3. 构建本地HTML环境模拟加密过程
  4. 批量加密字典后用于爆破

3. 详细实施步骤

3.1 初始侦察

  1. 验证码机制测试:首先确认验证码是否可重用

    • 使用同一验证码尝试不同用户名密码组合
    • 确认验证码是否为真验证(本例中验证码可重放)
  2. 抓包分析:通过Burp Suite等工具捕获登录请求

    • 观察用户名(txt_Name)和密码(txt_Password)字段
    • 确认这些字段已被加密处理

3.2 加密函数定位

  1. 前端代码分析

    • 在浏览器开发者工具中搜索加密字段名(txt_Name, txt_Password)
    • 定位到关键加密代码:
      if (checkResult) {
          txt_Name = encrypt(xssFilter(txt_Name));
          txt_Password = encrypt(xssFilter(txt_Password));
      }
      
    • 确认加密函数名为encrypt
  2. 相关JS文件识别

    • 检查网页引用的所有JS文件
    • 本例中涉及的文件:
      • jquery-3.1.1.min.js
      • crypto-js.js
      • decrypt.min.js
      • Login.js

3.3 本地环境搭建

  1. 下载所有JS资源

    • 使用浏览器"另存为"功能保存完整网页
    • 或手动下载所有引用的JS文件
  2. 构建本地加密HTML

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>文件加密</title>
        <script src="jquery-3.1.1.min.js"></script>
        <script src="crypto-js.js"></script>
        <script src="decrypt.min.js"></script>
        <script src="Login.js"></script>
        <script>
        function handleFileSelect(event) {
            const file = event.target.files[0];
            const reader = new FileReader();
            reader.onload = function(e) {
                const content = e.target.result;
                const lines = content.split('\n');
                let encryptedLines = [];
                lines.forEach(line => {
                    const encrypted = encrypt(line.trim()); // 修改加密函数名称
                    encryptedLines.push(encrypted);
                    console.log(encrypted);
                });
                // 将加密的结果输出到一个新的txt文件
                const encryptedContent = encryptedLines.join('\n');
                const blob = new Blob([encryptedContent], {type: 'text/plain'});
                const url = URL.createObjectURL(blob);
                const link = document.createElement('a');
                link.href = url;
                link.download = 'encrypted.txt';
                link.click();
            };
            reader.readAsText(file);
        }
        </script>
    </head>
    <body>
        <input type="file" id="fileInput" onchange="handleFileSelect(event)">
    </body>
    </html>
    

3.4 字典加密处理

  1. 准备明文字典

    • 创建包含用户名或密码的文本文件
    • 每行一个条目
  2. 使用本地HTML加密字典

    • 打开本地HTML文件
    • 选择字典文件上传
    • 系统会自动下载加密后的字典文件

3.5 爆破实施

  1. Burp Suite配置

    • 导入加密后的字典
    • 设置Intruder攻击
    • 注意保持验证码不变
  2. 结果分析

    • 根据响应长度、状态码等判断成功登录
    • 注意观察可能的错误提示差异

4. 技术要点总结

  1. 关键识别点

    • 验证码是否可重用
    • 加密字段名识别
    • 加密函数名定位
  2. 环境搭建要点

    • 确保所有JS文件路径正确
    • HTML中加密函数名必须与实际一致
    • 本地环境与目标环境JS版本一致
  3. 优势

    • 无需逆向分析加密算法
    • 不依赖专业JS知识
    • 适用于多种前端加密场景

5. 防御建议

对于开发人员,为防止此类攻击:

  1. 实现真实验证码机制,每次请求失效
  2. 增加时间戳或随机数参数防止重放
  3. 考虑后端加密而非前端加密
  4. 实施合理的爆破防护机制

6. 扩展应用

该方法不仅适用于登录爆破,还可应用于:

  1. 其他前端加密参数的批量生成
  2. API接口测试时的参数处理
  3. 需要大量加密数据的测试场景

7. 注意事项

  1. 法律合规:确保测试获得授权
  2. 加密函数变化:不同系统加密函数名可能不同
  3. 环境差异:注意JS文件版本一致性
  4. 性能考虑:大规模字典加密可能需要优化

通过这种方法,即使没有深厚的前端逆向知识,也能有效绕过前端加密实现爆破测试,大大降低了安全测试的门槛。

前端JS加密爆破绕过技术详解 1. 背景与概述 在渗透测试过程中,经常会遇到前端对用户名和密码进行加密处理的情况,这给传统的爆破攻击带来了挑战。本文详细介绍一种无需逆向分析JS加密算法,通过本地模拟加密过程实现爆破的技术方法。 2. 技术原理 该方法的核心思想是: 识别前端加密函数 下载所有相关JS文件 构建本地HTML环境模拟加密过程 批量加密字典后用于爆破 3. 详细实施步骤 3.1 初始侦察 验证码机制测试 :首先确认验证码是否可重用 使用同一验证码尝试不同用户名密码组合 确认验证码是否为真验证(本例中验证码可重放) 抓包分析 :通过Burp Suite等工具捕获登录请求 观察用户名(txt_ Name)和密码(txt_ Password)字段 确认这些字段已被加密处理 3.2 加密函数定位 前端代码分析 : 在浏览器开发者工具中搜索加密字段名(txt_ Name, txt_ Password) 定位到关键加密代码: 确认加密函数名为 encrypt 相关JS文件识别 : 检查网页引用的所有JS文件 本例中涉及的文件: jquery-3.1.1.min.js crypto-js.js decrypt.min.js Login.js 3.3 本地环境搭建 下载所有JS资源 : 使用浏览器"另存为"功能保存完整网页 或手动下载所有引用的JS文件 构建本地加密HTML : 3.4 字典加密处理 准备明文字典 : 创建包含用户名或密码的文本文件 每行一个条目 使用本地HTML加密字典 : 打开本地HTML文件 选择字典文件上传 系统会自动下载加密后的字典文件 3.5 爆破实施 Burp Suite配置 : 导入加密后的字典 设置Intruder攻击 注意保持验证码不变 结果分析 : 根据响应长度、状态码等判断成功登录 注意观察可能的错误提示差异 4. 技术要点总结 关键识别点 : 验证码是否可重用 加密字段名识别 加密函数名定位 环境搭建要点 : 确保所有JS文件路径正确 HTML中加密函数名必须与实际一致 本地环境与目标环境JS版本一致 优势 : 无需逆向分析加密算法 不依赖专业JS知识 适用于多种前端加密场景 5. 防御建议 对于开发人员,为防止此类攻击: 实现真实验证码机制,每次请求失效 增加时间戳或随机数参数防止重放 考虑后端加密而非前端加密 实施合理的爆破防护机制 6. 扩展应用 该方法不仅适用于登录爆破,还可应用于: 其他前端加密参数的批量生成 API接口测试时的参数处理 需要大量加密数据的测试场景 7. 注意事项 法律合规:确保测试获得授权 加密函数变化:不同系统加密函数名可能不同 环境差异:注意JS文件版本一致性 性能考虑:大规模字典加密可能需要优化 通过这种方法,即使没有深厚的前端逆向知识,也能有效绕过前端加密实现爆破测试,大大降低了安全测试的门槛。