前端JS加密算法登录解密
字数 1201 2025-08-11 11:39:36
前端JS加密算法登录解密技术详解
一、前言
在Web渗透测试过程中,经常会遇到网站登录页面使用前端JavaScript对账号密码进行加密后再传输的情况。这种安全措施使得直接捕获的请求包中用户名和密码参数是加密后的值,增加了渗透测试的难度。本文将详细介绍如何分析并破解这种前端JS加密机制。
二、加密机制分析流程
1. 捕获登录请求
- 使用浏览器开发者工具(F12)捕获登录请求
- 观察POST请求中的参数,特别是
username和password字段 - 确认这些字段的值是经过加密的(非明文)
2. 定位加密函数
-
全局搜索关键参数:
- 在开发者工具的Sources面板中,全局搜索
username参数 - 找到对应的加密函数(示例中为
enUserName)
- 在开发者工具的Sources面板中,全局搜索
-
分析加密函数调用链:
enUserName函数调用enString()函数enString()函数调用strEnc函数,并传入三个key值
-
定位核心加密函数:
- 全局搜索
strEnc()函数 - 在示例中,该函数位于
DESTools.js脚本中
- 全局搜索
3. 密码加密分析
密码加密流程如下:
enString(hex_md5(document.getElementById("password").value + "{" + salt + "}"))
即:
- 密码与盐值拼接:
password{salt} - 对拼接结果进行MD5哈希
- 对MD5结果使用
strEnc函数加密(传入三个key值)
三、本地JS执行验证
1. 提取加密脚本
- 将前端加密JS脚本全部复制出来
- 确保包含所有依赖函数(如
strEnc、hex_md5等)
2. 本地执行验证
- 在本地HTML文件中嵌入提取的JS脚本
- 传入已知的用户名和密码
- 调用加密函数生成加密结果
- 与捕获的请求包中的加密值对比,验证加密逻辑正确性
四、批量生成密码字典
1. 准备明文字典
var A = ['123456','password','123456789','12345678','12345','111111'];
2. 加密处理
var dist = new Array();
for(i=0, len=A.length; i<len; i++){
dist[i] = encStr(str, key1, key2, key3);
}
3. 应用场景
- 将生成的密文字典复制到Burp Suite等工具中
- 用于密码爆破攻击
五、技术要点总结
- 加密函数定位:通过全局搜索关键参数名找到加密函数入口
- 调用链分析:追踪函数调用关系,找到核心加密算法
- 盐值处理:注意密码是否添加了盐值(salt)进行增强
- 多层加密:示例中密码先MD5哈希,再进行DES加密
- 本地验证:必须验证本地加密结果与线上一致
- 字典生成:批量处理常见密码生成密文字典
六、防御建议
- 服务端验证:前端加密不能替代服务端安全措施
- HTTPS传输:确保加密后的凭证也在安全通道传输
- 动态盐值:使用每次请求变化的盐值
- 速率限制:防止密码爆破攻击
- 多因素认证:增加额外安全层
七、工具推荐
- 浏览器开发者工具:Chrome/Firefox开发者工具
- Burp Suite:用于拦截和重放请求
- 在线JS执行环境:如JSFiddle、CodePen等
- 加密识别工具:识别常见加密算法特征
通过以上步骤,可以系统地分析和破解使用前端JS加密的登录机制,同时也为开发人员提供了加强安全性的方向。