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