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

当密码不是MD5:手把手教你用Burp+jsEncrypter搞定前端自定义加密爆破 当密码不是MD5手把手教你用BurpjsEncrypter搞定前端自定义加密爆破渗透测试中遇到前端自定义加密的场景越来越普遍。许多开发者为了提升安全性会采用非标准的加密算法组合比如CryptoJS的多层嵌套加密。这种情况下传统的爆破工具往往束手无策。本文将带你完整走通从加密分析到成功爆破的全流程。1. 问题定位识别前端加密特征当你抓包发现密码字段不是常见的MD5或Base64而是一串看似随机的字符时很可能遇到了自定义加密。这时需要确认加密位置通过浏览器开发者工具查看网络请求确认加密发生在客户端分析加密特征观察密文长度、字符集等特征初步判断可能的加密方式定位加密代码在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(); }关键提取步骤确认加密算法类型AES、DES等提取密钥和IV如果有记录加密模式和填充方式注意是否有额外的编码处理如Base643. 环境搭建配置jsEncrypterPhantomJS3.1 安装必要组件组件作用下载来源jsEncrypterBurp插件桥接JS加密逻辑GitHubPhantomJS无头浏览器执行JS代码官网CryptoJS加密库如需CDN或本地安装步骤将PhantomJS添加到系统PATH将jsEncrypter插件jar文件放入Burp的extender目录准备加密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中打开jsEncrypter插件界面点击Connect测试连接使用Test功能验证加密是否正确4.2 配置Intruder攻击设置攻击类型为Sniper或Cluster bomb在Payload位置选择Payload Processing添加处理规则选择Invoke Burp extension→jsEncrypter注意爆破前建议先测试单个payload的加密结果是否正确4.3 结果分析与优化成功爆破后可以通过以下方式优化结果过滤响应长度异常的请求设置Grep匹配规则识别成功响应使用Logger插件记录完整交互过程5. 进阶技巧与问题排查5.1 常见问题解决方案问题现象可能原因解决方案连接失败PhantomJS未启动检查服务端口和防火墙加密结果不符逻辑不一致确保JS代码与前端完全一致性能低下复杂加密算法优化JS代码或升级硬件5.2 性能优化建议精简加密逻辑移除不必要的代码和依赖缓存加密结果对重复payload直接返回缓存多线程处理调整PhantomJS的worker数量// 示例简单缓存实现 var cache {}; function process(payload) { if(cache[payload]) return cache[payload]; var result encrypt(payload); cache[payload] result; return result; }6. 安全防护建议对于开发者而言防范此类攻击可以考虑实施服务端加密方案添加请求频率限制使用动态密钥或时间戳增加验证码等二次验证在实际测试中我发现最耗时的部分往往是逆向分析加密逻辑。有时开发者会故意混淆代码这时需要耐心调试。一个实用技巧是使用浏览器控制台逐步执行加密函数观察中间变量的变化。