从加密分析到登录验证码爆破
字数 949 2025-08-22 12:23:41

前端加密分析与验证码爆破实战教学

1. 加密分析基础

1.1 加密流量识别

  • 全流量加密特征:无法直接判断传输的具体参数
  • 关键搜索词:encryptdecryptcipher等加密相关术语

1.2 加密算法识别方法

  1. 全局搜索加密参数名称
  2. 逆向调试查找加密逻辑
  3. 分析前端JavaScript代码

2. 加密算法分析

2.1 AES-ECB加密

function i(e) {
  if ("" === e) return e;
  var t = a.enc.Utf8.parse(e),
  n = a.AES.encrypt(t, a.enc.Utf8.parse("19RMSFORECAST123"), {
    mode: a.mode.ECB,
    padding: a.pad.Pkcs7
  });
  return n.ciphertext.toString()
}

关键参数:

  • 密钥:"19RMSFORECAST123"(硬编码)
  • 模式:ECB(电子密码本模式)
  • 填充:PKCS7

2.2 AES-CBC加密

function s(e) {
  var t = a.enc.Utf8.parse(a.MD5("jQaTs$K6Vnb9#nNp").toString()),
  n = a.enc.Utf8.parse(a.MD5("QIBlGu3dwO#7geJm").toString().substr(0, 16));
  if ("" === e) return e;
  var i = a.enc.Utf8.parse(e),
  s = a.AES.encrypt(i, t, {
    iv: n,
    mode: a.mode.CBC,
    padding: a.pad.Pkcs7
  });
  return s.ciphertext.toString().toUpperCase()
}

关键参数:

  • 密钥:"jQaTs$K6Vnb9#nNp"的MD5哈希值
  • IV(初始化向量):"QIBlGu3dwO#7geJm"的MD5哈希值前16字节
  • 模式:CBC(密码分组链接模式)
  • 填充:PKCS7

3. 加解密脚本实现

3.1 使用CryptoJS库

const CryptoJS = require("crypto-js");

3.2 ECB模式加解密

// 加密函数(ECB模式)
function encryptECB(plaintext) {
  if (!plaintext) return plaintext;
  var key = CryptoJS.enc.Utf8.parse("19RMSFORECAST123");
  var encrypted = CryptoJS.AES.encrypt(
    CryptoJS.enc.Utf8.parse(plaintext),
    key,
    { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }
  );
  return encrypted.ciphertext.toString(); // 返回十六进制密文
}

// 解密函数(ECB模式)
function decryptECB(ciphertext) {
  if (!ciphertext) return ciphertext;
  var key = CryptoJS.enc.Utf8.parse("19RMSFORECAST123");
  var decrypted = CryptoJS.AES.decrypt(
    { ciphertext: CryptoJS.enc.Hex.parse(ciphertext) },
    key,
    { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }
  );
  return decrypted.toString(CryptoJS.enc.Utf8); // 返回解密后的明文
}

3.3 CBC模式加解密

// 加密函数(CBC模式)
function encryptCBC(plaintext) {
  if (!plaintext) return plaintext;
  var key = CryptoJS.enc.Utf8.parse(
    CryptoJS.MD5("jQaTs$K6Vnb9#nNp").toString()
  );
  var iv = CryptoJS.enc.Utf8.parse(
    CryptoJS.MD5("QIBlGu3dwO#7geJm").toString().substr(0, 16)
  );
  var encrypted = CryptoJS.AES.encrypt(
    CryptoJS.enc.Utf8.parse(plaintext),
    key,
    { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
  );
  return encrypted.ciphertext.toString().toUpperCase();
}

// 解密函数(CBC模式)
function decryptCBC(ciphertext) {
  if (!ciphertext) return ciphertext;
  var key = CryptoJS.enc.Utf8.parse(
    CryptoJS.MD5("jQaTs$K6Vnb9#nNp").toString()
  );
  var iv = CryptoJS.enc.Utf8.parse(
    CryptoJS.MD5("QIBlGu3dwO#7geJm").toString().substr(0, 16)
  );
  var decrypted = CryptoJS.AES.decrypt(
    { ciphertext: CryptoJS.enc.Hex.parse(ciphertext) },
    key,
    { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
  );
  return decrypted.toString(CryptoJS.enc.Utf8); // 返回解密后的明文
}

4. 登录参数分析

4.1 解密后参数

  1. userid - 用户名/用户ID
  2. password - 密码
  3. mfacode - 多因素认证码(爆破目标)
  4. type - 用户权限类型(可能的越权测试点)

4.2 三重验证机制

  1. 用户名密码验证
  2. 图形验证码
  3. 登录验证码(mfacode)

5. 验证码爆破实战

5.1 爆破准备

  1. 使用脚本生成加密后的密码本
  2. 准备Burp Suite工具

5.2 爆破步骤

  1. 拦截登录请求
  2. mfacode参数进行爆破
  3. 分析响应判断成功登录

5.3 安全风险升级

  • 如果系统仅使用用户名+登录验证码(无密码验证),风险将升级为任意用户登录

6. 防御建议

6.1 开发者防护措施

  1. 避免硬编码密钥和IV
  2. 使用动态生成的密钥
  3. 实现服务端加密
  4. 增加请求频率限制
  5. 使用更复杂的多因素认证机制

6.2 渗透测试要点

  1. 检查加密参数是否可预测
  2. 验证密钥是否可逆向获取
  3. 测试验证码是否可爆破
  4. 检查权限参数是否可越权修改

7. 总结

本案例展示了如何通过分析前端加密算法、实现加解密脚本,并利用已知加密机制对验证码进行爆破的全过程。关键在于:

  1. 准确识别加密算法和参数
  2. 正确实现加解密过程
  3. 针对薄弱环节(如mfacode)进行定向爆破
  4. 理解系统安全机制的整体设计缺陷
前端加密分析与验证码爆破实战教学 1. 加密分析基础 1.1 加密流量识别 全流量加密特征:无法直接判断传输的具体参数 关键搜索词: encrypt 、 decrypt 、 cipher 等加密相关术语 1.2 加密算法识别方法 全局搜索加密参数名称 逆向调试查找加密逻辑 分析前端JavaScript代码 2. 加密算法分析 2.1 AES-ECB加密 关键参数: 密钥: "19RMSFORECAST123" (硬编码) 模式:ECB(电子密码本模式) 填充:PKCS7 2.2 AES-CBC加密 关键参数: 密钥: "jQaTs$K6Vnb9#nNp" 的MD5哈希值 IV(初始化向量): "QIBlGu3dwO#7geJm" 的MD5哈希值前16字节 模式:CBC(密码分组链接模式) 填充:PKCS7 3. 加解密脚本实现 3.1 使用CryptoJS库 3.2 ECB模式加解密 3.3 CBC模式加解密 4. 登录参数分析 4.1 解密后参数 userid - 用户名/用户ID password - 密码 mfacode - 多因素认证码(爆破目标) type - 用户权限类型(可能的越权测试点) 4.2 三重验证机制 用户名密码验证 图形验证码 登录验证码(mfacode) 5. 验证码爆破实战 5.1 爆破准备 使用脚本生成加密后的密码本 准备Burp Suite工具 5.2 爆破步骤 拦截登录请求 对 mfacode 参数进行爆破 分析响应判断成功登录 5.3 安全风险升级 如果系统仅使用用户名+登录验证码(无密码验证),风险将升级为任意用户登录 6. 防御建议 6.1 开发者防护措施 避免硬编码密钥和IV 使用动态生成的密钥 实现服务端加密 增加请求频率限制 使用更复杂的多因素认证机制 6.2 渗透测试要点 检查加密参数是否可预测 验证密钥是否可逆向获取 测试验证码是否可爆破 检查权限参数是否可越权修改 7. 总结 本案例展示了如何通过分析前端加密算法、实现加解密脚本,并利用已知加密机制对验证码进行爆破的全过程。关键在于: 准确识别加密算法和参数 正确实现加解密过程 针对薄弱环节(如mfacode)进行定向爆破 理解系统安全机制的整体设计缺陷