当前位置: 首页 > news >正文

当密码不是MD5:手把手教你用Burp+jsEncrypter搞定前端自定义加密爆破

当密码不是MD5:手把手教你用Burp+jsEncrypter搞定前端自定义加密爆破

渗透测试中遇到前端自定义加密的场景越来越普遍。许多开发者为了提升安全性,会采用非标准的加密算法组合,比如CryptoJS的多层嵌套加密。这种情况下,传统的爆破工具往往束手无策。本文将带你完整走通从加密分析到成功爆破的全流程。

1. 问题定位:识别前端加密特征

当你抓包发现密码字段不是常见的MD5或Base64,而是一串看似随机的字符时,很可能遇到了自定义加密。这时需要:

  1. 确认加密位置:通过浏览器开发者工具查看网络请求,确认加密发生在客户端
  2. 分析加密特征:观察密文长度、字符集等特征,初步判断可能的加密方式
  3. 定位加密代码:在Sources面板搜索关键词如"encrypt"、"password"等

常见加密库特征:

  • CryptoJS:通常会出现CryptoJS.AES等字样
  • WebCrypto API:使用window.crypto.subtle对象
  • 自定义实现:可能包含复杂的位运算和字符串处理

2. 逆向分析:提取加密逻辑

找到加密代码后,需要提取出核心加密逻辑。以CryptoJS为例:

// 典型CryptoJS加密示例 function encryptPassword(pwd) { var key = CryptoJS.enc.Utf8.parse('my-secret-key'); var iv = CryptoJS.enc.Utf8.parse('1234567890123456'); var encrypted = CryptoJS.AES.encrypt( CryptoJS.enc.Utf8.parse(pwd), key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ); return encrypted.toString(); }

关键提取步骤:

  1. 确认加密算法类型(AES、DES等)
  2. 提取密钥和IV(如果有)
  3. 记录加密模式和填充方式
  4. 注意是否有额外的编码处理(如Base64)

3. 环境搭建:配置jsEncrypter+PhantomJS

3.1 安装必要组件

组件作用下载来源
jsEncrypterBurp插件,桥接JS加密逻辑GitHub
PhantomJS无头浏览器,执行JS代码官网
CryptoJS加密库(如需)CDN或本地

安装步骤:

  1. 将PhantomJS添加到系统PATH
  2. 将jsEncrypter插件jar文件放入Burp的extender目录
  3. 准备加密JS文件(包含提取的加密逻辑)

3.2 配置jsEncrypter

创建自定义JS文件custom_encrypt.js

// 引入必要的加密库 var CryptoJS = require('./crypto-js.js'); function process(payload) { // 这里放入提取的加密逻辑 var encrypted = yourEncryptFunction(payload); return encrypted; }

4. 实战爆破:从配置到结果分析

4.1 启动加密服务

phantomjs phantomjs_server.js

确保服务正常启动后,在Burp中:

  1. 打开jsEncrypter插件界面
  2. 点击"Connect"测试连接
  3. 使用"Test"功能验证加密是否正确

4.2 配置Intruder攻击

  1. 设置攻击类型为"Sniper"或"Cluster bomb"
  2. 在Payload位置选择"Payload Processing"
  3. 添加处理规则:选择"Invoke Burp extension"→"jsEncrypter"

注意:爆破前建议先测试单个payload的加密结果是否正确

4.3 结果分析与优化

成功爆破后,可以通过以下方式优化结果:

  • 过滤响应长度异常的请求
  • 设置Grep匹配规则识别成功响应
  • 使用Logger++插件记录完整交互过程

5. 进阶技巧与问题排查

5.1 常见问题解决方案

问题现象可能原因解决方案
连接失败PhantomJS未启动检查服务端口和防火墙
加密结果不符逻辑不一致确保JS代码与前端完全一致
性能低下复杂加密算法优化JS代码或升级硬件

5.2 性能优化建议

  1. 精简加密逻辑:移除不必要的代码和依赖
  2. 缓存加密结果:对重复payload直接返回缓存
  3. 多线程处理:调整PhantomJS的worker数量
// 示例:简单缓存实现 var cache = {}; function process(payload) { if(cache[payload]) return cache[payload]; var result = encrypt(payload); cache[payload] = result; return result; }

6. 安全防护建议

对于开发者而言,防范此类攻击可以考虑:

  • 实施服务端加密方案
  • 添加请求频率限制
  • 使用动态密钥或时间戳
  • 增加验证码等二次验证

在实际测试中,我发现最耗时的部分往往是逆向分析加密逻辑。有时开发者会故意混淆代码,这时需要耐心调试。一个实用技巧是使用浏览器控制台逐步执行加密函数,观察中间变量的变化。

http://www.jsqmd.com/news/906970/

相关文章:

  • 用ATMEGA328微控制器改造老式电话,实现DTMF信号生成与智能扩展
  • 保姆级教程:用Unity UGUI搞定坦克大战的摇杆控制与动态血条UI
  • 华为健康数据转换终极指南:3步解锁运动数据自由
  • 别再一键删除了!聊聊Source Map泄露的正确修复姿势:从Vue/React到Webpack配置
  • 从`.txt`到`.npy`:一个数据科学新手的踩坑实录与格式升级指南
  • Abaqus 仿真与 AI 融合实战入门
  • Microsoft Visual Studio快捷键大全
  • 告别‘无效分区表’!保姆级教程:用U盘给Ubuntu 20.04分区(GPT+UEFI版)
  • 银河麒麟aarch64如何高效做数据分析?分享一款内网离线数据分析利器
  • ImageMagick:跨平台图像处理工具套件
  • 压电陶瓷迟滞补偿MATLAB工具包:Preisach建模、GUI调试与实时控制实现
  • 别再只盯着RSA了!聊聊国密SM2和那些你可能不知道的ECC曲线标准(NIST/SECG/SM2)
  • Arduino超声波测距实战:从HC-SR04模块到嵌入式系统数据采集
  • 【Gemini Go SDK深度解密】:官方未公开的6个隐藏参数与3种内存泄漏修复方案
  • 网通AP硬件深度解析:PoE供电原理、电源架构、BUCK芯片层级全梳理
  • 07 - Agent 智能体:能自主干活儿的 AI
  • AI辅助开发的质量保障实践:我们如何让AI写的代码达到生产级标准?
  • Unity Shader Graph搞不定?手写一段GLSL代码实现自定义顶点动画(含Unity与ShaderLab绑定教程)
  • 独家披露:OpenAI未公开的Sora 2多视角几何约束算法(基于NeuS++改进的梯度掩码机制)
  • 除了换源,Kali Rolling更新慢/失败还有哪些招?我的5年使用经验谈
  • YOLOv11城市垃圾分类回收站目标检测数据集-13104张-YOLO-Waste-Detection-1
  • Steam版MyDockFinder界面太‘Windows’?三步教你找回经典Mac风格(附文件修改教程)
  • 2026年青岛合同纠纷律师选择标准与服务维度客观解读
  • 人形机器人市场报告获取渠道与优质推荐
  • 工业 AI Agent Harness Engineering 应用案例:设备巡检、故障诊断与生产调度优化
  • 新手实测一站式 AI 平台,上手难度到底高不高
  • 08 - Agent Skill:给 Agent 写一份“说明书“
  • Unity Timeline实战:用自定义轨道和Signal实现RPG对话系统(含完整代码)
  • 2026 年 5 月基金从业突围攻略:免费题库与软件深度测评 - 讲清楚了
  • 终极模组管理方案:5分钟搞定《空洞骑士》模组配置